
Well, in this case it would look like a definition of a completely independent function (=), which, obviously, clashes with the already defined one. In general, it's a good idea to keep things that don't make sense without some previous declaration inside the block, established by that declaration.
On 25 Oct 2014, at 19:42, Alexey Muranov
wrote: Hello,
i am trying to understand how typeclasses work. I know that they can be used as follows (from the manual):
data Foo = Foo {x :: Integer, str :: String}
instance Eq Foo where (Foo x1 str1) == (Foo x2 str2) = (x1 == x2) && (str1 == str2)
I am wondering, why is the following seemingly unambiguous syntax not allowed too?
data Foo = Foo { x :: Integer, str :: String }
instance Eq Foo
(Foo x1 str1) == (Foo x2 str2) = (x1 == x2) && (str1 == str2)
If it was allowed, it seems that it could also be applied to records:
class HasName r where name :: r -> String
data Bird = Bird { name :: String, wingNumber :: Integer } data Person = Person { name :: String, likesBirds :: Bool }
instance HasName Bird instance HasName Person
Alexey. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe