diff options
Diffstat (limited to 'testsuite/tests/typecheck/should_run/tcrun011.hs')
-rw-r--r-- | testsuite/tests/typecheck/should_run/tcrun011.hs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/testsuite/tests/typecheck/should_run/tcrun011.hs b/testsuite/tests/typecheck/should_run/tcrun011.hs new file mode 100644 index 0000000000..5c6cab8ea0 --- /dev/null +++ b/testsuite/tests/typecheck/should_run/tcrun011.hs @@ -0,0 +1,25 @@ +{-# LANGUAGE ExistentialQuantification, FlexibleContexts, + MultiParamTypeClasses #-} + +-- !!! Existential data tyes +-- Hugs didn't like this one + +module Main (main) where + + +class MyClass a b where + foo :: a -> b -> Int + +data Special = forall b. (MyClass Int b)=> MkSpecial b +data General a = forall b. (MyClass a b)=> MkGeneral b + +instance MyClass Int Bool where + foo x False = -x + foo x True = x + +xs :: [General Int] +xs = [MkGeneral True, MkGeneral False] + +main = print [foo (3::Int) x | MkGeneral x <- xs] + -- Without the (::Int) part we get an + -- incomprehensible error message :-( |