{-# LANGUAGE DataKinds, KindSignatures, TypeOperators #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE StandaloneDeriving #-} -- {-# OPTIONS_GHC -Wall -fno-warn-tabs #-} {-# OPTIONS_GHC -Wall -fno-warn-tabs -fplugin=Plugin.TypeCheck.Nat.Simple #-} import GHC.TypeNats main :: IO () main = print . tail_ $ 1 :. 2 :. 3 :. Nil infixr 6 :. data List :: Nat -> * -> * where Nil :: List 0 a (:.) :: a -> List ln a -> List (ln + 1) a deriving instance Show a => Show (List n a) tail_ :: List (n + 1) a -> List n a tail_ Nil = error "tail_: Nil" tail_ (_ :. xs) = xs