どうですか
data Card = Hand (Suit, Face) (Suit, Face) (Suit, Face) (Suit, Face) (Suit, Face)
?
または、本当にリストを使用したい場合(つまり、15枚のカードのハンドが必要な場合、私の提案は非常にばかげたものになります)、コンストラクターを使用しないdata Card = Hand [(Suit, Face)]
ようにユーザーに指示し、代わりに「スマートコンストラクター」を提供できます。お気に入り
fromList :: [(Suit, Face]) -> Maybe Card
fromList xs
| length xs == 5 = Just (Hand xs)
| otherwise = Nothing
次に、コンストラクター自体を使用可能にして、「提供されたリストに正確に5つの要素が含まれていることが保証されている場合にのみ使用する」などの警告を表示することもできます。
ちなみに、データ型Card
とコンストラクターHand
の名前は少し直感に反していませんか?あなたの場合、データ型を呼び出すべきだと思いHand
ます。は-ペアCard
の優れたエイリアスなので、とを行うことができます。Suit
Face
type Card = (Suit, Face)
data Hand = Hand [Card]