
Hello, I'm trying to compile the following code:
import Data.IORef
class F f where m :: (a -> a) -> f a -> f a
class M m a where mm :: (a -> a) -> m -> IO ()
instance (F f, M m (f a)) => M m a where mm f v = mm (m f) v
And I'm getting: $ ghci teste.lhs -XMultiParamTypeClasses -XFlexibleInstances -XFlexibleContexts -XUndecidableInstances -XIncoherentInstances GHCi, version 6.10.1: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Loading package integer ... linking ... done. Loading package base ... linking ... done. Failed, modules loaded: none. Prelude> ^DLeaving GHCi. GHCi, version 6.10.1: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Loading package integer ... linking ... done. Loading package base ... linking ... done. [1 of 1] Compiling Main ( teste.lhs, interpreted ) teste.lhs:1:0: Context reduction stack overflow; size = 20 Use -fcontext-stack=N to increase stack size to N `$dM{atp} :: {M m (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f a))))))))))))))))))))}' arising from a use of `mm' at teste.lhs:10:13-22 `$dM{atm} :: {M m (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f a)))))))))))))))))))}' arising from a use of `mm' at teste.lhs:10:13-22 `$dM{atj} :: {M m (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f a))))))))))))))))))}' arising from a use of `mm' at teste.lhs:10:13-22 `$dM{atg} :: {M m (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f a)))))))))))))))))}' arising from a use of `mm' at teste.lhs:10:13-22 `$dM{atd} :: {M m (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f a))))))))))))))))}' arising from a use of `mm' at teste.lhs:10:13-22 `$dM{ata} :: {M m (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f a)))))))))))))))}' arising from a use of `mm' at teste.lhs:10:13-22 `$dM{at7} :: {M m (f (f (f (f (f (f (f (f (f (f (f (f (f (f a))))))))))))))}' arising from a use of `mm' at teste.lhs:10:13-22 `$dM{at4} :: {M m (f (f (f (f (f (f (f (f (f (f (f (f (f a)))))))))))))}' arising from a use of `mm' at teste.lhs:10:13-22 `$dM{at1} :: {M m (f (f (f (f (f (f (f (f (f (f (f (f a))))))))))))}' arising from a use of `mm' at teste.lhs:10:13-22 `$dM{asY} :: {M m (f (f (f (f (f (f (f (f (f (f (f a)))))))))))}' arising from a use of `mm' at teste.lhs:10:13-22 `$dM{asV} :: {M m (f (f (f (f (f (f (f (f (f (f a))))))))))}' arising from a use of `mm' at teste.lhs:10:13-22 `$dM{asS} :: {M m (f (f (f (f (f (f (f (f (f a)))))))))}' arising from a use of `mm' at teste.lhs:10:13-22 `$dM{asP} :: {M m (f (f (f (f (f (f (f (f a))))))))}' arising from a use of `mm' at teste.lhs:10:13-22 `$dM{asM} :: {M m (f (f (f (f (f (f (f a)))))))}' arising from a use of `mm' at teste.lhs:10:13-22 `$dM{asJ} :: {M m (f (f (f (f (f (f a))))))}' arising from a use of `mm' at teste.lhs:10:13-22 `$dM{asG} :: {M m (f (f (f (f (f a)))))}' arising from a use of `mm' at teste.lhs:10:13-22 `$dM{asD} :: {M m (f (f (f (f a))))}' arising from a use of `mm' at teste.lhs:10:13-22 `$dM{asA} :: {M m (f (f (f a)))}' arising from a use of `mm' at teste.lhs:10:13-22 `$dM{asx} :: {M m (f (f a))}' arising from a use of `mm' at teste.lhs:10:13-22 `$dM{asj} :: {M m (f a)}' arising from a use of `mm' at teste.lhs:10:13-22 Failed, modules loaded: none. An example of instances of these classes:
instance F [] where m = map
instance M (IORef a) a where mm = flip modifyIORef
I don't get what's the problem with my definition. Can someone clarify me on this? Greetings. -- marcot http://marcot.iaaeee.org/