refined
refine
実行時に正しいか検証
refineTH
Template Haskellを使ってコンパイル時に検証
Refined <述語> <実際の型>
code:例.hs
type LowerCaseString = Refined LowerCase String
述語となる型をinstanceにする
以下はLowerCaseという新しい述語を定義している
文字列が全て小文字であるかを判断する述語
code:例.hs
data LowerCase
instance Predicate LowerCase String where
validate _ value =
if all isLower value
then Nothing
else Just "Not all chars are lower-case"
参考
実装の背景と、簡単な使い方