LiquidHaskell
https://github.com/ucsd-progsys/liquidhaskell/raw/develop/resources/logo.png
一応Logically Qualified Data Haskellの略らしい
既存Haskellのプロジェクトに部分的に導入することもできる
フロントエンド
こっちを使う
バックエンドのSMTに投げるための処理などをしている
オンライン実行環境
コメント{-@ .. @-}を用いてHaskellコードにannotionをつける
code:hs
{-@ safeHead :: { xs:a | len xs > 0 } -> a @-} safeHead [] = liquidError "empty list"
safeHead (x : _) = x
篩型エイリアスの定義が可能
code:hs
{-@ type Pos = { v:Int | v > 0 } @-}
上の方に↑を定義しておけば、別の場所で↓のように使える
code:hs
{-@ hoge :: Pos @-}
hoge ..
参考