True is a bad argument10 is a good argumenttake and drop reconstruction0fib is an uninterpreted function0averagetakefibfib is an uninterpreted functionLists Elementsappendtake and drop reconstructiontake and drop reconstruction
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