packages feed

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