UMinho Haskell Libraries (1.0)ContentsIndex
Data.TermLanguage.AutoTermLanguage
Portability portable
Stability experimental
Maintainer jba @ di . uminho . pt
Contents
Classes
Types
Reexported Modules
Reexports from Data.Generics to avoid extra imports clauses...
Usage
Description

A generic implementations for Substitutions and Unification in a TermLanguage.

Some conventions used in this module:

  • ) functions with suffix _ are default methods that will instanciate the corresponding methods on the TermLanguage class.
  • ) generic functions have prefix g.
  • ) in generic transversals with two arguments, a single g in the prefix means that both arguments have the same (generic) type, and two ggs in the prefix mean a trully generic variant.
Synopsis
class (Ord a, Data a, Data (t a)) => AutoTermLanguage t a
varConstr :: AutoTermLanguage t a => a -> t a
gVarsIn :: AutoTermLanguage t a => t a -> GenericQ [a]
gGetVar :: AutoTermLanguage t a => t a -> GenericQ (Maybe a)
gAppS :: AutoTermLanguage t a => Subst a t -> GenericT
gUnifyT :: (AutoTermLanguage t a, Data x) => t a -> x -> x -> Maybe (Subst a t)
ggUnifyT :: AutoTermLanguage t a => t a -> GenericQ (GenericQ (Maybe (Subst a t)))
gMatchT :: (AutoTermLanguage t a, Data x) => t a -> x -> x -> Maybe (Subst a t)
ggMatchT :: AutoTermLanguage t a => t a -> GenericQ (GenericQ (Maybe (Subst a t)))
data Subst a t
module Data.TermLanguage
Classes
class (Ord a, Data a, Data (t a)) => AutoTermLanguage t a
Main class for this module. The only method that does not have a default definition is the varConstr method. This method specifies the constructor for variables in the TermLanguage
Instances
varConstr :: AutoTermLanguage t a => a -> t a
varConstr is the name for the constructor that injects Variables in Terms.
gVarsIn :: AutoTermLanguage t a => t a -> GenericQ [a]
gVarsIn _ t is a generic function that computes the list of variables in t. The first argument is dummy.
gGetVar :: AutoTermLanguage t a => t a -> GenericQ (Maybe a)
gGetVar _ x is a generic function that extracts a variable from a Term. That is, it returns Just v when x==(Var v) and Nothing otherwise. The first argument for gGetVar is a dummy argument used to establish the intended Term type. It can be instanciated with undefined.
gAppS :: AutoTermLanguage t a => Subst a t -> GenericT
Generic application of a substitution
gUnifyT :: (AutoTermLanguage t a, Data x) => t a -> x -> x -> Maybe (Subst a t)
Generic unification (first argument is dummy)
ggUnifyT :: AutoTermLanguage t a => t a -> GenericQ (GenericQ (Maybe (Subst a t)))
Generic unification (first argument is dummy)
gMatchT :: (AutoTermLanguage t a, Data x) => t a -> x -> x -> Maybe (Subst a t)
Generic matching (first argument is dummy)
ggMatchT :: AutoTermLanguage t a => t a -> GenericQ (GenericQ (Maybe (Subst a t)))
Generic matching (first argument is dummy)
Types
data Subst a t
Substitutions are implemented as FiniteMaps.
Instances
(Show a, Show (t a)) => Show (Subst a t)
AutoTermLanguage t a => TermLanguage t Subst a
Reexported Modules
The end-user will be interessed in using the functions from the TermLanguage module.
module Data.TermLanguage
Reexports from Data.Generics to avoid extra imports clauses...
Typeable,Data
Usage

To use the class AutoTermLanguage it is necessary:

  1. Define term constructor data type with the variable type has parameter and make it instance of the Data and Typeable classes (include these classes in the deriving clause).
  2. Intanciate the class AutoTermLanguage specifying the var-constructor.

EXAMPLE OF USE:

 import Data.TermLanguage.AutoTermLanguage

 data Term a = Var a | Const String | BOp String (Term a) (Term a) 
   deriving (Eq, Show, Data, Typeable)

 instance AutoTermLanguage Term Int
   where varConstr = Var

 t1,t2 :: Term Int
 ...
 mgu = unifyT t1 t2    --computes the most general unifier

Produced by Haddock version 0.6