Это столкнется с множеством проблем, как только вы получите объявления экземпляров, такие как
instance Eq a => Eq [a] where
[] == [] = True
(x:xs) == (y:ys) = x == y && xs == ys
_ == _ = False
и
instance (Eq a,Eq b) => Eq (a,b) where
(a1,b1) == (a2,b2) = a1 == a2 && b1 == b2
вместе с одним конкретным экземпляром (например, instance Eq Bool
).
Вы получите бесконечный список экземпляров для Eq
- Bool
, [Bool]
, [[Bool]]
, [[[Bool]]]
и т. Д., (Bool,Bool)
, ((Bool,Bool),Bool)
, (((Bool,Bool),Bool),Bool)
и так далее, а также с различными их комбинациями, такими как ([((Bool,[Bool]),Bool)],Bool)
и так далее. Не ясно, как представить их в String
; даже список TypeRep
потребовал бы довольно умного перечисления.
Компилятор может (попытаться) определить, является ли тип экземпляром Eq
для какого-либо данного типа, но он не читает все объявления экземпляров в области видимости, а затем просто начинает выводить все возможные случаи, так как это никогда не закончится!
Важный вопрос, конечно, зачем вам это нужно?