Könnten Sie mir bitte sagen, gibt es irgendwelche Erweiterungen des Haskell-Ableitungsmechanismus für die Enum-Klasse? Ich meine, es gibt viele vernünftige Situationen neben dem `` nullary constructors '' Fall. Gibt es Arbeiten zu diesem Thema?Aufzählung von GADTs in Haskell
6
A
Antwort
4
Brauchen Sie wirklich GADTs? Oder möchten Sie die Beschränkung lediglich auf einen einfachen Aufzählungstyp mit nur reinen Konstruktoren aufheben? Wenn Letzteres, dann gibt es Optionen. Eine besteht darin, den Generic
-Mechanismus von GHC zusammen mit einer Implementierung einer geeignet generischen Aufzählungsklasse zu verwenden. Dies ist im Paket generic-deriving
verfügbar. Hier ein Beispiel:
{-# LANGUAGE DeriveGeneriC#-}
import Generics.Deriving
data Tree a = Leaf a | Node (Tree a) (Tree a)
deriving (Show, Generic)
instance GEnum Bool
instance GEnum a => GEnum (Tree a)
test :: [Tree Bool]
test = take 10 genum
Nun test
ist die folgende Liste:
[ Leaf False
, Node (Leaf False) (Leaf False)
, Leaf True
, Node (Leaf False) (Node (Leaf False) (Leaf False))
, Node (Node (Leaf False) (Leaf False)) (Leaf False)
, Node (Leaf False) (Leaf True)
, Node (Node (Leaf False) (Leaf False)) (Node (Leaf False) (Leaf False))
, Node (Leaf True) (Leaf False),Node (Leaf False) (Node (Leaf False) (Node (Leaf False) (Leaf False)))
, Node (Node (Leaf False) (Leaf False)) (Leaf True)
]
Diese Implementierung von genum
verwendet diagonalization Produkte zu verschmelzen. Dies garantiert, dass jeder Wert tatsächlich irgendwo in der Liste erscheint, aber zu einer überraschenden Reihenfolge führen kann.
Verwandte Themen
- 1. makeLenses für GADTs (Haskell)
- 2. Haskell Aufzählung
- 3. Do GADTs brechen equational Argumentation in Haskell
- 4. Wie erlauben Sie GADTs in Haskell?
- 5. Haskell Pattern Matching auf GADTs mit Data Kinds
- 6. Wann wurden GADTs in GHC eingeführt?
- 7. Typklassen und GADTs
- 8. Typeably Casting GADTs
- 9. GADTs vs. MultiParamTypeClasses
- 10. Konstruieren von Betontypen für Typklassen mit GADTs
- 11. Erweiterungsmethode auf Aufzählung nicht Instanz Aufzählung
- 12. Aufzählung in Matplotlib Abbildung
- 13. C#: zirkuläre Aufzählung von IEnumerable
- 14. Aufzählung von einem Index/Wert in Ruby
- 15. Sind reguläre haskell-algebraische Datentypen äquivalent zu kontextfreien Grammatiken? Was ist mit GADTS?
- 16. Aufzählung aller Partitionen in Mathematica
- 17. Aufzählung als Parameter in Typoskript
- 18. Automatische Aufzählung einer Sequenz
- 19. Scala Aufzählung und Reflexion
- 20. HttpContent Header inkonsistent Aufzählung
- 21. Zweck von {- # # -} in Haskell
- 22. KVC vs schnelle Aufzählung
- 23. Tail-Funktion für "sichere Liste" mit GADTs
- 24. Aufzählung aller Teilaufträge
- 25. JavaScript Aufzählung Generation
- 26. Aufzählung mit Rohwerten
- 27. Schleife durch unregelmäßige Aufzählung in Delphi
- 28. Wie Name einer Aufzählung erhalten in MATLAB
- 29. So lösen Sie die Mehrdeutigkeit in meinen GADTs
- 30. Eine Aufzählung von einer Funktion in C zurückgeben?
Oh, daran habe ich gedacht. Vielen Dank. –