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`