{-# LANGUAGE DataKinds, TypeOperators #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE AllowAmbiguousTypes #-} {-# OPTIONS_GHC -Wall -fno-warn-tabs -fplugin=Plugin.TypeCheck.Nat.Simple #-} import GHC.TypeNats import Data.Proxy foo :: 1 <= n => Proxy (n - 1 + 1) -> Proxy (n + 1 - 1) foo = id bar :: 1 <= a => Proxy (a + 1 - 1) -> Proxy (a - 1 + 1) bar = id baz :: 1 <= b => Proxy (a + b) -> Proxy ((a + 1) + (b - 1)) baz = id hoge :: Proxy (a - 1) -> Proxy (a - 1) hoge = id main :: IO () main = putStrLn "test log"