existential types and functional dependencies
The following module is accepted by ghc (with -fglasgow-exts) but rejected by hugs: module ParseAny where class Syntax tag as | tag -> as where parse :: tag -> String -> as data AnyAs = forall tag as. Syntax tag as => MkAs tag as data AnyTag = forall tag as. Syntax tag as => MkTag tag parseAny :: AnyTag -> String -> AnyAs parseAny (MkTag tag) str = MkAs tag $ parse tag str -- ------------------------------------------------------- Hugs mode: Restart with command line option +98 for Haskell 98 mode Reading file "/home/linux-bkb/hugs/lib/hugs/libraries/Hugs/Prelude.hs": Reading file "/home/linux-bkb/hugs/lib/hugs/libraries/Prelude.hs": Reading file "ParseAny.hs": Type checking ERROR "ParseAny.hs":13 - Cannot justify constraints in explicitly typed binding *** Expression : parseAny *** Type : AnyTag -> String -> AnyAs *** Given context : () *** Constraints : Syntax _0 a When I omit the functional dependency "| tag -> as", ghc yields a similar error Cheers Christian
participants (1)
-
Christian Maeder