-- Currently only running on a prototype implementation. plus :: Int -> Int -> Int plus = (+) ok1 :: a -> a ok1 = \x -> x ok2 :: v -> v ok2 = (\x -> x) :: w -> w ok3 :: Int -> Int ok3 = (\x -> x) :: a -> a ok4 = ((\x -> x) :: a -> a) :: Int -> Int bad1 :: b -> b --bad1 = (\x -> x) :: a -> b apply :: (a -> b) -> a -> b apply f x = f (x :: a) --bad2 f x = f (x :: a) bad3 :: (a -> b) -> a -> b --bad3 f x = f (x :: b) bad4 :: (a -> b) -> a -> b --bad4 f x = f (x :: c) ok5 = (let id = (\x -> x) :: b -> b in id id) :: a -> a ok6 = 7 :: _ --bad6 = 7 :: a ok7 = plus 2 :: _ -> Int ok8 = plus 7 :: Int -> _ ok9 :: _ -> _ -> Int ok9 = apply :: _ -> _