洗練型のシステムを実装する際に、型が整形式であることを確認する必要があります。たとえば、Num[100,0]
のようなタイプは発生しません.は、lb
より大きく、ub
より小さい数字のタイプです。私は、書いた:「restricted Monad」の既知の問題に私を得たモナドを使用して洗練された型の整形式を暗黙にチェックする
-- FORMATION RULES
class RefTy t
where tyOK :: t -> Bool
instance RefTy Ty
where tyOK (NumTy (n1, n2)) = n1 <= n2
tyOK (CatTy cs) = isSet cs
{-
data WellFormed t = Valid t
| Invalid
instance Monad WellFormed
where
(>>=) :: RefTy a => WellFormed a -> (a -> WellFormed b) -> WellFormed b
Valid t >>= f
| tyOK t = f t
| otherwise = Invalid
Invalid >>= _ = Invalid
-}
を。提案された答えは、Wellformed
モナドを一般的にするが、機能を制限することである。しかし、それはどこにでも整形された小切手を加えることに戻るだろう。周りを回る良い方法はありますか?
そして、どのように定義する 'return'ようなものを書くことができるだろう/ '純粋な'? – Alec