packages feed

lambda-cube-0.3.0.0: test/LambdaCube/STLCTestExample.hs

{-# LANGUAGE QuasiQuotes #-}
module LambdaCube.STLCTestExample where

import           LambdaCube.STLC

lcBaseId, lcBaseArrId :: ExtLCTerm
lcBaseId = [qTerm| \x : # . x |]
lcBaseArrId = [qTerm| \x : $lcBaseArr . x |]

lcBaseArr :: ExtLCType
lcBaseArr = [qType| # -> # |]

------------------------------------------------------------
-- Pseudo Church Numeral examples
------------------------------------------------------------

lcPCN0, lcPCN1, lcPCN2, lcPCN3, lcPCN4, lcPCN5 :: ExtLCTerm
lcPCN0 = [qTerm| \s : $lcBaseArr . $lcBaseId |]
lcPCN1 = [qTerm| \s : $lcBaseArr . \z : # . s z |]
lcPCN2 = [qTerm| \s : $lcBaseArr . \z : # . s (s z) |]
lcPCN3 = [qTerm| \s : $lcBaseArr . \z : # . s (s (s z)) |]
lcPCN4 = [qTerm| \s : $lcBaseArr . \z : # . s (s (s (s z))) |]
lcPCN5 = [qTerm| \s : $lcBaseArr . \z : # . s (s (s (s (s z)))) |]

lcPCNAdd, lcPCNMul :: ExtLCTerm
lcPCNAdd =
  [qTerm|
     \n : $lcPCNTy . \m : $lcPCNTy .
     \s : $lcBaseArr . \z : # . n s (m s z)
  |]
lcPCNMul =
  [qTerm|
     \n : $lcPCNTy . \m : $lcPCNTy .
     \s : $lcBaseArr . \z : # . n (m s) z
  |]

lcPCNTy :: ExtLCType
lcPCNTy = [qType| $lcBaseArr -> $lcBaseArr |]