typeclass - Haskell Recursive Type Classes -


i want create recursive instance type based on tuples. looking similar this:

class provider b   getinstance :: -> b  instance provider b => provider (x, a) b   getinstance (x, a) = getinstance  instance provider (b, x) b   getinstance (b, _) = b  tryfunc1 :: int tryfunc1 =   let provider = ("test", (10, ())) :: (string, (int, ()))   in getinstance provider  tryfunc2 :: string tryfunc2 =   let provider = ("test", (10, ())) :: (string, (int, ()))   in getinstance provider 

unfortunatelly, haskell fails solve instance. reason?

the solution stop using deprecated overlappinginstances pragma , start using per instance overlapping , overlappable pragmas. change:

instance {-# overlappable #-} provider b => provider (x, a) b   getinstance (x, a) = getinstance  instance {-# overlapping #-} provider (b, x) b   getinstance (b, _) = b 

i tryfunc1 10 , tryfunc2 "test".


technically need either overlappable or overlapping pragma, believe practice have both in case... also, suppose behaviour want, note gets first of whatever type looking (so getinstance (10, (20, ())) :: int gives me 10 , not 20)

good source of info ticket tracking feature's creation.


Comments

Popular posts from this blog

javascript - Thinglink image not visible until browser resize -

firebird - Error "invalid transaction handle (expecting explicit transaction start)" executing script from Delphi -

mongodb - How to keep track of users making Stripe Payments -