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.
2.
3.
4.
-
5.
6.
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`