Consider the code below :

{-# LANGUAGE
MultiParamTypeClasses,FlexibleInstances,FunctionalDependencies,UndecidableInstances,FlexibleContexts
 #-}
class Foo a c | a -> c
instance Foo Int Float
f :: (Foo Int a) => Int -> a
f = undefined

Now when I see the inferred type of f in ghci

> :t f

> f :: Int -> Float

Now If I add the following code

g :: Int -> Float
g = undefined

h :: (Foo Int a) => Int -> a
h = g


I get the error

Could not deduce (a ~ Float)


I am not able to understand what has happened here ? The restriction "Foo
Int a" should have restricted the type of h to "Int -> Float" as shown in
the inferred type of f.


- Satvik
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to