Czy możesz mi powiedzieć, czy są jakieś rozszerzenia mechanizmu wywodzącego się z Haskell dla klasy Enum? Mam na myśli wiele rozsądnych sytuacji poza przypadkami "konstruktorów nullary". Czy są jakieś prace na ten temat?Wyliczanie GADT w Haskell
6
A
Odpowiedz
4
Czy naprawdę potrzebujesz GADT? A może chcesz tylko znieść ograniczenie do zwykłego typu wyliczeniowego z tylko zerowymi konstruktorami? Jeśli to drugie, to są opcje. Jednym z nich jest użycie mechanizmu GHC Generic
wraz z implementacją odpowiednio ogólnej klasy wyliczeniowej. Jest dostępny w pakiecie generic-deriving
. Oto przykład:
{-# 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
Teraz test
jest następująca lista:
[ 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)
]
Ta implementacja genum
wykorzystuje diagonalizację scalić produktów. Gwarantuje to, że każda wartość rzeczywiście pojawia się gdzieś na liście, ale może z kolei prowadzić do zaskakującego porządku.
Powiązane problemy
- 1. Haskell: GADT z Rozpakować Pragma
- 2. Jak zezwolić na GADT w Haskell?
- 3. Kiedy wprowadzono GADT w GHC?
- 4. Wykorzystanie rzeczywistego świata GADT
- 5. Wyliczanie interfejsu w Javie
- 6. Jak mogę odzyskać udostępnianie w GADT?
- 7. GADT dla polimorficznych listy
- 8. wyliczanie() - generowanie w Pythonie
- 9. Wyliczanie zdania w Pythonie
- 10. Implikacje związane z używaniem GADT
- 11. Przekształcanie GADT bez ograniczeń w inny GADT z ograniczeniami, gdy takie więzy zatrzymają się.
- 12. wyliczanie enum w przypadku przełącznika
- 13. Wyliczanie przypisanych skrótów w Excelu
- 14. Wyliczanie pul aplikacji w IIS
- 15. Wyliczanie przez Dictionary.KeyCollection w celu
- 16. wyliczanie wartości niedosłownych w Swift
- 17. Wyliczanie pythoniczne pętli while
- 18. Mapowanie wyliczanie hibernacji
- 19. Wyliczanie Grails do JSON
- 20. Jak zatrzymać szybkie wyliczanie?
- 21. Konwersja Wyliczanie do iterator
- 22. Wyliczanie i blokowanie ConcurrentDictionary
- 23. Wyliczanie plików Wyrzucanie wyjątków
- 24. Wyliczanie MySQL kontra zestaw
- 25. Dowody poziomu otwartego typu w Haskell/Idris
- 26. Instancja Functor dla GADT z ograniczeniem typu
- 27. Jak korzystać z ograniczonych ograniczeń z GADT?
- 28. Przechowuj wyliczanie jako liczbę całkowitą w RavenDB
- 29. Wyliczanie zainstalowanych przeglądarek w systemie OS X
- 30. Bezpieczne wyliczanie niestandardowych atrybutów w systemie Android
Och, właśnie o tym myślałem. Dziękuję Ci. –