Enum sınıfı için Haskell türetme mekanizmasının uzantıları olduğunu söyleyebilir misiniz? “Nullary constructors” davası dışında birçok makul durum var. Bu konuda herhangi bir eser var mı?Haskell'de GADT'lerin numaralandırılması
6
A
cevap
4
Gerçekten GADT'ye ihtiyacınız var mı? Ya da sadece kısıtlamaları sadece nulet yapıcılarla düz bir numaralandırma türüne kaldırmak mı istiyorsunuz? İkincisi ise, o zaman seçenekler var. Biri, GHC'nin Generic
mekanizmasını uygun bir jenerik numaralandırma sınıfının uygulanması ile birlikte kullanmaktır. Bu, generic-deriving
paketinde bulunur.
{-# 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
Şimdi test
şu listesi::
[ 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)
]
genum
Bu uygulama ürününü birleştirmek köşegenleştirmeyi kullanır İşte bir örnek. Bu, her değerin gerçekten listede bir yerde göründüğünü garanti eder, ancak sırayla şaşırtıcı bir siparişe yol açabilir.
Oh, düşündüğüm buydu. Teşekkür ederim. –