
Right, I was incorrect, you should use the solution that Quentin gave- to recap it, The basic problem is that GHCi is trying to infer a single type -- called "monomorphic" -- for your more general type. the type of `bar` is `Foo a => a -> a`, when ghci looks at a literal number (like 10) it interprets it as a "default" type of Integer (not int). Since Integer does not instance Foo, then GHCi yells at you. Quentin explained it far better than I, I refer you to his email. /Joe Amitava Shee wrote:
Thank you.
I get the following error after making the suggested changes
-- foo.hs {-# LANGUAGE FlexibleInstances #-} module Foo where
class Foo a where bar :: a -> a -- -- instance Foo Int where -- bar i = i + 10 -- -- instance Foo [Char] where -- bar m = "foo" ++ m --
instance Num a => Foo a where bar x = x + 10
-----
foo.hs:14:0: Constraint is no smaller than the instance head in the constraint: Num a (Use -XUndecidableInstances to permit this) In the instance declaration for `Foo a' Failed, modules loaded: none. Prelude>
...Amitava
On Tue, Apr 21, 2009 at 9:42 AM, Joe Fredette
mailto:jfredett@gmail.com> wrote: If I'm not mistaken, changing:
bar i = i + 10
to
bar i = i + 10::Int
ought to fix it.
The issue is that the compiler is being to general wrt the type of "10", it's inferring that it's just of type (Num a => a) -- the type of all numbers (sortof.)
Alternately, you could implement this as:
instance Num a => Foo a where bar x = x + 10
which similarly ought to fix it. Do you understand why?
Amitava Shee wrote:
I have the following code
-- foo.hs module Foo where
class Foo a where bar :: a -> a instance Foo Int where bar i = i + 10 ------------------
It fails to compile withe following error *Foo> bar 10
<interactive>:1:4: Ambiguous type variable `t' in the constraints: `Num t' arising from the literal `10' at <interactive>:1:4-5 `Foo t' arising from a use of `bar' at <interactive>:1:0-5 Probable fix: add a type signature that fixes these type variable(s) *Foo>
- Thanks Amitava Shee ------------------------------------------------------------------------
_______________________________________________ Beginners mailing list Beginners@haskell.org mailto:Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners