{-@ LIQUID "--no-termination" @-} {-@ LIQUID "totality" @-} module DataBase (values) where {-@ values :: forall val -> Bool>. k:key -> [Dict key val] -> [val] @-} values :: key -> [Dict key val] -> [val] values k = map (go k) where {-@ go :: forall v -> Bool>. i:k -> Dict k v -> v @-} go k (D _ f) = f k data Dict key val = D {ddom :: [key], dfun :: key -> val} {-@ data Dict key val val -> Bool> = D ( ddom :: [key]) ( dfun :: i:key -> val) @-}