Я знаю, что это код немного глупый, но может ли кто-нибудь объяснить, почему этот isList [42]
возвращает True
, тогда как isList2 [42]
печатает False
, и как это предотвратить? Я хотел бы лучше понять некоторые из более неясных расширений типа GHC, и я подумал, что это будет интересный пример для выяснения.
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverlappingInstances #-}
{-# LANGUAGE IncoherentInstances #-}
class IsList a where
isList :: a -> Bool
instance IsList a where
isList x = False
instance IsList [a] where
isList x = True
isList2 = isList
main =
print (isList 42) >>
print (isList2 42) >>
print (isList [42]) >>
print (isList2 [42])