packages feed

singletons-1.0: tests/compile-and-dump/Singletons/Nat.hs

{-# OPTIONS_GHC -fno-warn-unused-imports #-}

module Singletons.Nat where

import Data.Singletons.TH
import Data.Singletons
import Data.Proxy
import Data.Singletons.SuppressUnusedWarnings

$(singletons [d|
  data Nat where
    Zero :: Nat
    Succ :: Nat -> Nat
      deriving (Eq, Show, Read)

  plus :: Nat -> Nat -> Nat
  plus Zero m = m
  plus (Succ n) m = Succ (plus n m)

  pred :: Nat -> Nat
  pred Zero = Zero
  pred (Succ n) = n
 |])