Refinement Types For Haskell ============================ {#berg} --------
+ Niki Vazou + Eric Seidel + *Ranjit Jhala*
**UC San Diego** Install -------
`cabal install liquidhaskell`
Requires an SMTLIB2 binary
+ `http://z3.codeplex.com` + `http://cvc4.cs.nyu.edu` + `http://mathsat.fbk.eu`
Try Online ----------
`http://goto.ucsd.edu/liquid/haskell/demo` Follow Slides -------------
`goto.ucsd.edu/~rjhala/liquid/haskell/plpv/lhs/` {#plan} -------- 1.
Refinements
2.
Measures
3.
Higher-Order Functions
4.
Abstract Refinements
-
Dependency, Induction , Indexing , Recursion
5.
Lazy Evaluation
6.
Termination
Evaluation ========== LiquidHaskell Is For Real -------------------------
Substantial code bases, tricky properties.
Inference, FTW.
Numbers -------
**Library** LOC --------------------------- ------ `GHC.List` 310 `Data.List` 504 `Data.Set.Splay` 149 `Data.Vector.Algorithms` 1219 `Data.Map.Base` 1396 `Data.Text` 3125 `Data.Bytestring` 3501 --------------------------- ------
Evaluation: Termination ----------------------- How bad is *termination* requirement anyway? -
`520` recursive functions
-
`67%` automatically proved
-
`30%` need *witnesses* `/[...]`
-
`18` *not proven terminating*
-
`12` don't actually terminate (top-level `IO`)
-
`6` *probably* terminate, but *we* can't tell why.
Future Work ----------- - Error Messages - Speed - Case Studies Thank You! ---------- `cabal install liquidhaskell`