module Holes (plus) where {-@ foo :: x:_ -> y:{Int | y > 0} -> _ @-} foo :: Int -> Int -> Int foo x y = x zero = foo 0 1 {-@ baz :: _ -> _ -> a @-} baz :: a -> b -> b baz x y = y baz' = baz 1 2 data P a b = P a b {-@ goo :: _ -> b -> _ @-} goo :: P a b -> b -> a goo p@(P a b) x = a y = goo (P 1 1) 2 {-@ bar :: {v:[{v0:Int | v0 > 0}] | _ } -> Int @-} bar :: [Int] -> Int bar [x] = x x = bar [1] {-@ plus :: x:_ -> y:_ -> {v:_ | v = x + y} @-} plus :: Int -> Int -> Int plus x y = x + y {-@ type UNat = {v:_ | v >= 0} @-} {-@ zoo :: UNat @-} zoo = 1