{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE IncoherentInstances #-}
main = do
data True
class CA t where
type A t
type A t = True
fa _ = "Int"
class CB t where
type B t
type B t = True
fb _ = "Bool"
class CC t where
type C t
type C t = True
fc _ = "Char"
class CD t where
type D t
type D t = True
fd _ = "Float"
class CE t where
type E t
type E t = True
fe _ = "Double"
class CAll t t1 t2 t3 t4 t5 where
g
:: (t1
~ A t
, t2
~ B t
, t3
~ C t
, t4
~ D t
, t5
~ E t
) => t
-> String
instance (CA t) => CAll t True t2 t3 t4 t5 where
g = fa
instance (CB t) => CAll t t1 True t3 t4 t5 where
g = fb
instance (CC t) => CAll t t1 t2 True t4 t5 where
g = fc
instance (CD t) => CAll t t1 t2 t3 True t5 where
g = fd
instance (CE t) => CAll t t1 t2 t3 t4 True where
g = fe
ey0jIExBTkdVQUdFIFR5cGVGYW1pbGllcyAjLX0Key0jIExBTkdVQUdFIE11bHRpUGFyYW1UeXBlQ2xhc3NlcyAjLX0Key0jIExBTkdVQUdFIEZsZXhpYmxlSW5zdGFuY2VzICMtfQp7LSMgTEFOR1VBR0UgSW5jb2hlcmVudEluc3RhbmNlcyAjLX0KCm1haW4gPSBkbwogIHByaW50IChnICh1bmRlZmluZWQgOjogSW50KSkKICBwcmludCAoZyAodW5kZWZpbmVkIDo6IEJvb2wpKQogIHByaW50IChnICh1bmRlZmluZWQgOjogQ2hhcikpCiAgcHJpbnQgKGcgKHVuZGVmaW5lZCA6OiBGbG9hdCkpCiAgcHJpbnQgKGcgKHVuZGVmaW5lZCA6OiBEb3VibGUpKQogIApkYXRhIFRydWUKCmNsYXNzIENBIHQgd2hlcmUKICB0eXBlIEEgdAogIHR5cGUgQSB0ID0gVHJ1ZQogIGZhIDo6IHQgLT4gU3RyaW5nCiAgCmluc3RhbmNlIENBIEludCB3aGVyZQogIGZhIF8gPSAiSW50IgogIApjbGFzcyBDQiB0IHdoZXJlCiAgdHlwZSBCIHQKICB0eXBlIEIgdCA9IFRydWUKICBmYiA6OiB0IC0+IFN0cmluZwoKaW5zdGFuY2UgQ0IgQm9vbCB3aGVyZQogIGZiIF8gPSAiQm9vbCIKCmNsYXNzIENDIHQgd2hlcmUKICB0eXBlIEMgdAogIHR5cGUgQyB0ID0gVHJ1ZQogIGZjIDo6IHQgLT4gU3RyaW5nCgppbnN0YW5jZSBDQyBDaGFyIHdoZXJlCiAgZmMgXyA9ICJDaGFyIgoKY2xhc3MgQ0QgdCB3aGVyZQogIHR5cGUgRCB0CiAgdHlwZSBEIHQgPSBUcnVlCiAgZmQgOjogdCAtPiBTdHJpbmcKCmluc3RhbmNlIENEIEZsb2F0IHdoZXJlCiAgZmQgXyA9ICJGbG9hdCIKCmNsYXNzIENFIHQgd2hlcmUKICB0eXBlIEUgdAogIHR5cGUgRSB0ID0gVHJ1ZQogIGZlIDo6IHQgLT4gU3RyaW5nCgppbnN0YW5jZSBDRSBEb3VibGUgd2hlcmUKICBmZSBfID0gIkRvdWJsZSIKCmNsYXNzIENBbGwgdCB0MSB0MiB0MyB0NCB0NSB3aGVyZQogIGcgOjogKHQxIH4gQSB0LCB0MiB+IEIgdCwgdDMgfiBDIHQsIHQ0IH4gRCB0LCB0NSB+IEUgdCkgPT4gdCAtPiBTdHJpbmcKCmluc3RhbmNlIChDQSB0KSA9PiBDQWxsIHQgVHJ1ZSB0MiB0MyB0NCB0NSB3aGVyZQogIGcgPSBmYQogIAppbnN0YW5jZSAoQ0IgdCkgPT4gQ0FsbCB0IHQxIFRydWUgdDMgdDQgdDUgd2hlcmUKICBnID0gZmIKCmluc3RhbmNlIChDQyB0KSA9PiBDQWxsIHQgdDEgdDIgVHJ1ZSB0NCB0NSB3aGVyZQogIGcgPSBmYwogIAppbnN0YW5jZSAoQ0QgdCkgPT4gQ0FsbCB0IHQxIHQyIHQzIFRydWUgdDUgd2hlcmUKICBnID0gZmQKICAKaW5zdGFuY2UgKENFIHQpID0+IENBbGwgdCB0MSB0MiB0MyB0NCBUcnVlIHdoZXJlCiAgZyA9IGZlCgo=