summaryrefslogtreecommitdiff
path: root/testsuite/tests/ghc-regress/typecheck/should_run/tcrun011.hs
blob: 5c6cab8ea06499b0408cc02939dafada1bdd9739 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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 :-(