{-# LANGUAGE DeriveDataTypeable #-}
-----------------------------------------------------------------------------
-- |
-- Module      :  Language.Maude.Syntax
-- Copyright   :  (c) David Lazar, 2012
-- License     :  MIT
--
-- Maintainer  :  lazar6@illinois.edu
-- Stability   :  experimental
-- Portability :  unknown
--
-- Types representing Maude syntax and terms
-----------------------------------------------------------------------------
module Language.Maude.Syntax
    ( Term(..)
    ) where

import Data.Data

-- TODO: handle kinds

data Term
    = Term
        { termSort     :: String
        , termOp       :: String
        , termChildren :: [Term]
        }
    -- ^ Generic representation of terms in Maude
    | IterTerm
        { termSort     :: String
        , termOp       :: String
        , termChildren :: [Term]
        , iterations   :: Integer
        }
    -- ^ Term constructed from an iterated (@iter@) operator,
    -- for example, the @s_@ constructor for Nats
    deriving (Eq, Ord, Show, Data, Typeable)