[Haskell-cafe] Occurs check: cannot construct the infinite type - but it doesn't need to
Tom Ellis
tom-lists-haskell-cafe-2013 at jaguarpaw.co.uk
Fri Feb 23 15:55:32 UTC 2018
I have run into a similar problem to my last question which is not resolved
with NoMonomorphismRestriction.
'foo2' has a partial type signature and I get an occurs check. 'foo3' is
exactly the same except it has no signature, and it works! Why can't 'foo2'
be inferred like 'foo3'?
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE PartialTypeSignatures #-}
{-# LANGUAGE NoMonomorphismRestriction #-}
type family Quux a
type family Corge a
foo :: ( b ~ Quux a
, a ~ Corge b )
=> a
-> b
foo = undefined
-- Occurs check: cannot construct the infinite type:
-- t0 ~ Corge (Quux t0)
-- arising from a use of ‘foo’
-- The type variable ‘t0’ is ambiguous
--
foo2 :: _
foo2 = foo
foo3 = foo
More information about the Haskell-Cafe
mailing list