HaRe-0.6: refactorer/PwPf/PWCore.hs
-----------------------------------------------------------------------------
-- |
-- Module : PWCore
-- Copyright : (c) Jose Proenca 2005
-- License : GPL
--
-- Maintainer : jproenca@di.uminho.pt
-- Stability : experimental
-- Portability : portable
--
-- A syntax of a general pointwise language.
--
-----------------------------------------------------------------------------
module PWCore (
{- | A simple definition of a pointwise language where:
* products and sums are allowed;
* constants are dealed by the use of /in/ and /out/ functions that
allows to go from any type that has an associated base functor to and
from a representation of that base functor using sums and products;
* recursion is only possible by the use of the fixed point constructor.
-}
PWTerm (..)
) where
import RefacUtils
-- *Definition of the data type
data PWTerm = Unit -- ^Unit
| Var' String -- ^Variable
| PWTerm:@:PWTerm -- ^Aplication
| Abstr String PWTerm -- ^Abstraction
| PWTerm:><:PWTerm -- ^Pair
| Fst PWTerm -- ^Point-wise first
| Snd PWTerm -- ^Point-wise second
| Inl PWTerm -- ^Point-wise left injection
| Inr PWTerm -- ^Point-wise right injection
| Case PWTerm (String,PWTerm) (String,PWTerm)
-- ^Case of
| In HsExpP PWTerm -- ^Injection on a specified type
| Out HsExpP PWTerm -- ^Extraction of the functor of a specified type
| Fix PWTerm
-- ^Fixed point
deriving Show