compdata-0.8.1.2: Compositional Data Types

Copyright(c) 2011 Patrick Bahr
LicenseBSD3
MaintainerPatrick Bahr <paba@diku.dk>
Stabilityexperimental
Portabilitynon-portable (GHC Extensions)
Safe HaskellNone
LanguageHaskell98

Data.Comp.Multi.Variables

Description

This module defines an abstract notion of (bound) variables in compositional data types, and scoped substitution. Capture-avoidance is not taken into account. All definitions are generalised versions of those in Data.Comp.Variables.

Synopsis

Documentation

class HasVars f v where Source

This multiparameter class defines functors with variables. An instance HasVar f v denotes that values over f might contain and bind variables of type v.

Minimal complete definition

Nothing

Methods

isVar :: f a :=> Maybe v Source

Indicates whether the f constructor is a variable. The default implementation returns Nothing.

bindsVars :: KOrd a => f a :=> Map (E a) (Set v) Source

Indicates the set of variables bound by the f constructor for each argument of the constructor. For example for a non-recursive let binding: data Let i e = Let Var (e i) (e i) instance HasVars Let Var where bindsVars (Let v x y) = Map.fromList [(y, (Set.singleton v))] If, instead, the let binding is recursive, the methods has to be implemented like this: bindsVars (Let v x y) = Map.fromList [(x, (Set.singleton v)), (y, (Set.singleton v))] This indicates that the scope of the bound variable also extends to the right-hand side of the variable binding.

The default implementation returns the empty map.

Instances

(HasVars f v0, HasVars g v0) => HasVars ((:+:) * f g) v 

type GSubst v a = Map v (A a) Source

type CxtSubst h a f v = GSubst v (Cxt h f a) Source

type Subst f v = CxtSubst NoHole (K ()) f v Source

varsToHoles :: forall f v. (HTraversable f, HasVars f v, Ord v) => Term f :-> Context f (K v) Source

containsVar :: (Ord v, HasVars f v, HTraversable f, HFunctor f) => v -> Cxt h f a :=> Bool Source

This function checks whether a variable is contained in a context.

variables :: (Ord v, HasVars f v, HTraversable f, HFunctor f) => Cxt h f a :=> Set v Source

This function computes the set of variables occurring in a context.

variableList :: (HasVars f v, HTraversable f, HFunctor f, Ord v) => Cxt h f a :=> [v] Source

This function computes the list of variables occurring in a context.

variables' :: (Ord v, HasVars f v, HFoldable f, HFunctor f) => Const f :=> Set v Source

This function computes the set of variables occurring in a context.

appSubst :: (Ord v, SubstVars v t a) => GSubst v t -> a :-> a Source

compSubst :: (Ord v, HasVars f v, HTraversable f) => CxtSubst h a f v -> CxtSubst h a f v -> CxtSubst h a f v Source

This function composes two substitutions s1 and s2. That is, applying the resulting substitution is equivalent to first applying s2 and then s1.

getBoundVars :: forall f a v i. (HasVars f v, HTraversable f) => f a i -> f (a :*: K (Set v)) i Source

This combinator pairs every argument of a given constructor with the set of (newly) bound variables according to the corresponding HasVars type class instance.