{-# Language MultiParamTypeClasses, FlexibleContexts, FlexibleInstances, IncoherentInstances, TypeFamilies, PatternGuards, FunctionalDependencies #-}
class MConcat1 a b
where mConcat1 :: a -> [b]
instance MConcat1 [a] b => MConcat1 [[a]] b
where mConcat1 x = x >>= mConcat1
instance (a ~ b) => MConcat1 [a] b
class MConcat2 a b
where mConcat2
:: a
-> Maybe b
where mConcat2 x = x >>= mConcat2
instance (a
~ b
) => MConcat2
(Maybe a
) b
main
= do print $ mConcat1
[[[123]],[[345]],[[222],[3333,5555]]]
print $ mConcat2
(Just
123) print $ mConcat2
(Just
$ Just
345)
ey0jIExhbmd1YWdlIE11bHRpUGFyYW1UeXBlQ2xhc3NlcywgRmxleGlibGVDb250ZXh0cywgRmxleGlibGVJbnN0YW5jZXMsIEluY29oZXJlbnRJbnN0YW5jZXMsIFR5cGVGYW1pbGllcywgUGF0dGVybkd1YXJkcywgRnVuY3Rpb25hbERlcGVuZGVuY2llcyAjLX0KCmltcG9ydCBDb250cm9sLk1vbmFkCgoKY2xhc3MgTUNvbmNhdDEgYSBiCgogICAgd2hlcmUgbUNvbmNhdDEgOjogYSAtPiBbYl0KCmluc3RhbmNlIE1Db25jYXQxIFthXSBiID0+IE1Db25jYXQxIFtbYV1dIGIKCiAgICB3aGVyZSBtQ29uY2F0MSB4ID0geCA+Pj0gbUNvbmNhdDEKCmluc3RhbmNlIChhIH4gYikgPT4gTUNvbmNhdDEgW2FdIGIKCiAgICB3aGVyZSBtQ29uY2F0MSA9IGlkCiAgICAKCmNsYXNzIE1Db25jYXQyIGEgYgoKICAgIHdoZXJlIG1Db25jYXQyIDo6IGEgLT4gTWF5YmUgYgoKaW5zdGFuY2UgTUNvbmNhdDIgKE1heWJlIGEpIGIgPT4gTUNvbmNhdDIgKE1heWJlIChNYXliZSBhKSkgYgoKICAgIHdoZXJlIG1Db25jYXQyIHggPSB4ID4+PSBtQ29uY2F0MgoKaW5zdGFuY2UgKGEgfiBiKSA9PiBNQ29uY2F0MiAoTWF5YmUgYSkgYgoKICAgIHdoZXJlIG1Db25jYXQyID0gaWQKCgoKbWFpbiA9IGRvIHByaW50ICQgbUNvbmNhdDEgW1tbMTIzXV0sW1szNDVdXSxbWzIyMl0sWzMzMzMsNTU1NV1dXQogICAgICAgICAgcHJpbnQgJCBtQ29uY2F0MSBbMjM0NV0KICAgICAgICAgIAogICAgICAgICAgcHJpbnQgJCBtQ29uY2F0MiAoSnVzdCAxMjMpCiAgICAgICAgICBwcmludCAkIG1Db25jYXQyIChKdXN0ICQgSnVzdCAzNDUp