haskell - I made my first typeclass and I got "Could not deduce (g ~ Int) from the context (Group g)" -


i'm new haskell , i've tried make own typeclass here:

class group g     makegroup :: g -> g -> [g]  instance group int     makegroup size offset = [ x `mod` size | x <- [1 + offset, size + offset]]  mytest :: (group g) => int -> int -> [g] mytest x y = makegroup x y 

could tell me went wrong?

new problem

the type signature mytest :: (group g) => g -> g -> [g] compiles throws error

<interactive>:30:1: no instance (group g0) arising use of ‘it’ type variable ‘g0’ ambiguous note: there potential instance available: instance group int -- defined @ ex.hs:4:10 in first argument of ‘print’, namely ‘it’ in stmt of interactive ghci command: print it

what stem from?

this class definition:

class group g     makegroup :: g -> g -> [g] 

this means in use of makegroup, 3 occurrences of type variable g must instantiated same type. in mytest function's type signature, you're indirectly saying first 2 occurrences ints third 1 type g (caller's choice!) satisfies group constraint:

mytest :: (group g) => int -> int -> [g] mytest x y = makegroup x y 

edit: well, make clearer, should add when g "any type," more precisely means any type mytest's caller chooses. way generic types work: function mytest template caller can specialize choosing type g be.

the notation odd, (g ~ int) in error type equality constraint: haskell telling that, given declarations you've provided elsewhere, in mytest's signature g's type must same int, you've asserted type g long type implements group. assertion not compatible you've said elsewhere in code.


Comments

Popular posts from this blog

android - MPAndroidChart - How to add Annotations or images to the chart -

javascript - Add class to another page attribute using URL id - Jquery -

firefox - Where is 'webgl.osmesalib' parameter? -