[Haskell-cafe] Question about kinds
ryani.spam at gmail.com
Sat Jun 7 04:50:37 EDT 2008
"type" declarations are not first-class; treat them more like macro
expansions. In particular, you cannot make a function polymorphic
over a type declaration.
You can make this typecheck using a "data" or "newtype" declaration for Id:
newtype Id x = Identity x
data Id x = Identity x
You do need to wrap/unwrap the "Identity" constructor then.
On Fri, Jun 6, 2008 at 3:41 PM, Klaus Ostermann <ko at daimi.au.dk> wrote:
> Why does the code below not pass the type checker?
> If I could explictly parameterize y with the type constructor Id (as e.g. in
> System F), then 'y Id' should have the type Int -> Int
> and hence "y Id x" should be OK, but with Haskell's implicit type parameters
> it does not work.
> So, how can I make this work?
> type Id a = a
> x :: Id Int
> x = undefined
> y :: (a Int) -> (a Int)
> y = undefined
> test = y x
> Couldn't match expected type `a Int' against inferred type `Id Int'
> In the first argument of `y', namely `x'
> In the expression: y x
> In the definition of `test': test = y x
More information about the Haskell-Cafe