True
is a bad argument10
is a good argument0
average
take
fib
fib
is an uninterpreted function
Use Liquid Types to encode (and repair) information flow.
Policy Agnostic Programming
*Type-Driven Repair for Information Flow Security by Polikarpova et. al.
Blind Review Policy: Only Chair can see Authors.
Policy Violation: Look at the type error!
Blind Review Policy: Only Chair can see Authors.
getAuthors :: PaperId -> Tagged <{\u -> u == Chair}> [User]
Tagged
monad is policy parametric data Tagged <p :: User -> Bool> a
(>>=) :: forall <p :: User -> Bool>.
Tagged <p> a
-> (a -> Tagged <p> b)
-> Tagged <p> b
return :: forall <p :: User -> Bool>.
a -> Tagged <p> a
print :: forall <p :: User -> Bool>.
viewer:Tagged <p> (User<p>)
-> msg:Tagged <p> String
-> IO ()
{-@ whenUserIsChair :: forall <p :: User -> Bool>.
Tagged <{\v -> v == Chair}>[a]
-> Tagged <p> [a]
@-}
whenUserIsChair t = do
u <- getCurrentUser
if u == Chair then t else return []
Using the whenUserIsChair
conditional
Viewer should have same privilages as the user (bug in HotCRP).
Only print paper status after notification date (bug in EDAS).
cabal install liquidhaskell
https://github.com/ucsd-progsys/liquidhaskell
http://www.refinement-types.org
online demo @ http://goto.ucsd.edu/liquidhaskell