packages feed

typelevel-rewrite-rules-1.0: test/should-compile/GHC/TypeLits/Test.hs

{-# LANGUAGE DataKinds, RankNTypes, TypeFamilies, TypeOperators #-}
{-# OPTIONS_GHC -fplugin TypeLevel.Rewrite
                -fplugin-opt=TypeLevel.Rewrite:GHC.TypeLits.RewriteRules.NatRule
                -fplugin-opt=TypeLevel.Rewrite:GHC.TypeLits.RewriteRules.SymbolRule #-}
module GHC.TypeLits.Test where

import GHC.TypeLits
import GHC.TypeLits.RewriteRules ()


ex1 :: ((1 + n) ~ (n + 1) => r)
    -> proxy n
    -> r
ex1 r _ = r

ex2 :: ( ((s1 `AppendSymbol` "foo") `AppendSymbol` s2)
       ~ (s1 `AppendSymbol` ("foo" `AppendSymbol` s2))
      => r
       )
    -> proxy s
    -> r
ex2 r _ = r