次のことを考慮してください
data Predicate = Pred Name Arity Arguments
type Name = String
type Arity = Int
type Arguments = [Entity]
type Entity = String
これにより、
Pred "divides" 2 ["1", "2"]
Pred "between" 3 ["2", "1", "3"]
だけでなく、「違法」
Pred "divides" 2 ["1"]
Pred "between" 3 ["2", "3"]
アリティが引数リストの長さと一致しないため、「不正」です。
このような関数を使用しないと
makePred :: Name -> Arity -> Arguments -> Maybe Predicate
makePred n a args | a == length args = Just (Pred n a args)
| otherwise = Nothing
Predicate モジュールから makePred のみをエクスポートする場合、値コンストラクターの正確性を強制する方法はありますか?