Tipos de dados algébricos (ADTs) em Haskell podem se tornar automaticamente instâncias de alguns tipos de classes (comoShow
,Eq
) derivando deles.
data Maybe a = Nothing | Just a
deriving (Eq, Ord)
Minha pergunta é: como isso deriving
funciona, ou seja, como Haskell sabe como implementar as funções da typeclass derivada para o ADT derivado?
Além disso, por que está deriving
restrito apenas a certas typeclasses? Por que não posso escrever minha própria typeclass que pode ser derivada?
fonte
StandaloneDeriving
no manual do ghc e haskellwikiDo relatório Haskell 98:
Aqui está a descrição de como derivar essas classes de tipo: http://www.haskell.org/onlinereport/derived.html#derived-apêndice
fonte
É possível usar o Template Haskell para gerar declarações de instância de maneira semelhante às cláusulas derivadas.
O exemplo a seguir foi descaradamente roubado do Haskell Wiki :
fonte