6
EnumクラスのHaskell導出メカニズムの拡張はありますか教えてください。私は、 `` nullary constructors ''のケースのほかに、多くの合理的な状況があることを意味します。このトピックに関連する作品はありますか?HaskellでのGADTの列挙
EnumクラスのHaskell導出メカニズムの拡張はありますか教えてください。私は、 `` nullary constructors ''のケースのほかに、多くの合理的な状況があることを意味します。このトピックに関連する作品はありますか?HaskellでのGADTの列挙
本当にGADTが必要ですか?あるいは、無限のコンストラクタだけを持つ単純な列挙型に制限を持ち上げたいだけですか?後者の場合は、オプションがあります。 1つは、GHCのGeneric
メカニズムと適切に汎用的な列挙クラスの実装を併用することです。これはgeneric-deriving
パッケージで利用できます。次に例を示します。
{-# 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
、test
次のリストである:
[ 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
のこの実装は、製品をマージするために対角化を使用しています。これにより、すべての値が実際にリストのどこかに現れることが保証されますが、順番に驚くべき順序につながる可能性があります。
ああ、それは私が考えていたものです。ありがとうございました。 –