unison-core1-0.0.0
Safe HaskellSafe-Inferred
LanguageHaskell2010

Unison.Term

Synopsis

Documentation

data MatchCase loc a Source #

Constructors

MatchCase 

Fields

Instances

Instances details
Generic1 (MatchCase loc :: Type -> Type) Source # 
Instance details

Defined in Unison.Term

Associated Types

type Rep1 (MatchCase loc) :: k -> Type #

Methods

from1 :: forall (a :: k). MatchCase loc a -> Rep1 (MatchCase loc) a #

to1 :: forall (a :: k). Rep1 (MatchCase loc) a -> MatchCase loc a #

Foldable (MatchCase loc) Source # 
Instance details

Defined in Unison.Term

Methods

fold :: Monoid m => MatchCase loc m -> m #

foldMap :: Monoid m => (a -> m) -> MatchCase loc a -> m #

foldMap' :: Monoid m => (a -> m) -> MatchCase loc a -> m #

foldr :: (a -> b -> b) -> b -> MatchCase loc a -> b #

foldr' :: (a -> b -> b) -> b -> MatchCase loc a -> b #

foldl :: (b -> a -> b) -> b -> MatchCase loc a -> b #

foldl' :: (b -> a -> b) -> b -> MatchCase loc a -> b #

foldr1 :: (a -> a -> a) -> MatchCase loc a -> a #

foldl1 :: (a -> a -> a) -> MatchCase loc a -> a #

toList :: MatchCase loc a -> [a] #

null :: MatchCase loc a -> Bool #

length :: MatchCase loc a -> Int #

elem :: Eq a => a -> MatchCase loc a -> Bool #

maximum :: Ord a => MatchCase loc a -> a #

minimum :: Ord a => MatchCase loc a -> a #

sum :: Num a => MatchCase loc a -> a #

product :: Num a => MatchCase loc a -> a #

Traversable (MatchCase loc) Source # 
Instance details

Defined in Unison.Term

Methods

traverse :: Applicative f => (a -> f b) -> MatchCase loc a -> f (MatchCase loc b) #

sequenceA :: Applicative f => MatchCase loc (f a) -> f (MatchCase loc a) #

mapM :: Monad m => (a -> m b) -> MatchCase loc a -> m (MatchCase loc b) #

sequence :: Monad m => MatchCase loc (m a) -> m (MatchCase loc a) #

Functor (MatchCase loc) Source # 
Instance details

Defined in Unison.Term

Methods

fmap :: (a -> b) -> MatchCase loc a -> MatchCase loc b #

(<$) :: a -> MatchCase loc b -> MatchCase loc a #

Generic (MatchCase loc a) Source # 
Instance details

Defined in Unison.Term

Associated Types

type Rep (MatchCase loc a) :: Type -> Type #

Methods

from :: MatchCase loc a -> Rep (MatchCase loc a) x #

to :: Rep (MatchCase loc a) x -> MatchCase loc a #

Show a => Show (MatchCase loc a) Source # 
Instance details

Defined in Unison.Term

Methods

showsPrec :: Int -> MatchCase loc a -> ShowS #

show :: MatchCase loc a -> String #

showList :: [MatchCase loc a] -> ShowS #

Eq a => Eq (MatchCase loc a) Source # 
Instance details

Defined in Unison.Term

Methods

(==) :: MatchCase loc a -> MatchCase loc a -> Bool #

(/=) :: MatchCase loc a -> MatchCase loc a -> Bool #

(Ord loc, Ord a) => Ord (MatchCase loc a) Source # 
Instance details

Defined in Unison.Term

Methods

compare :: MatchCase loc a -> MatchCase loc a -> Ordering #

(<) :: MatchCase loc a -> MatchCase loc a -> Bool #

(<=) :: MatchCase loc a -> MatchCase loc a -> Bool #

(>) :: MatchCase loc a -> MatchCase loc a -> Bool #

(>=) :: MatchCase loc a -> MatchCase loc a -> Bool #

max :: MatchCase loc a -> MatchCase loc a -> MatchCase loc a #

min :: MatchCase loc a -> MatchCase loc a -> MatchCase loc a #

type Rep1 (MatchCase loc :: Type -> Type) Source # 
Instance details

Defined in Unison.Term

type Rep1 (MatchCase loc :: Type -> Type) = D1 ('MetaData "MatchCase" "Unison.Term" "unison-core1-0.0.0-Kp7ZcNnt5XdB8ImvFwyntI" 'False) (C1 ('MetaCons "MatchCase" 'PrefixI 'True) (S1 ('MetaSel ('Just "matchPattern") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Pattern loc)) :*: (S1 ('MetaSel ('Just "matchGuard") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 Maybe) :*: S1 ('MetaSel ('Just "matchBody") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1)))
type Rep (MatchCase loc a) Source # 
Instance details

Defined in Unison.Term

type Rep (MatchCase loc a) = D1 ('MetaData "MatchCase" "Unison.Term" "unison-core1-0.0.0-Kp7ZcNnt5XdB8ImvFwyntI" 'False) (C1 ('MetaCons "MatchCase" 'PrefixI 'True) (S1 ('MetaSel ('Just "matchPattern") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Pattern loc)) :*: (S1 ('MetaSel ('Just "matchGuard") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe a)) :*: S1 ('MetaSel ('Just "matchBody") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a))))

data F typeVar typeAnn patternAnn a Source #

Base functor for terms in the Unison language We need typeVar because the term and type variables may differ.

Constructors

Int Int64 
Nat Word64 
Float Double 
Boolean Bool 
Text Text 
Char Char 
Blank (Blank typeAnn) 
Ref Reference 
Constructor ConstructorReference 
Request ConstructorReference 
Handle a a 
App a a 
Ann a (Type typeVar typeAnn) 
List (Seq a) 
If a a a 
And a a 
Or a a 
Lam a 
LetRec IsTop [a] a 
Let IsTop a a 
Match a [MatchCase patternAnn a] 
TermLink Referent 
TypeLink Reference 

Instances

Instances details
Generic1 (F typeVar typeAnn patternAnn :: Type -> Type) Source # 
Instance details

Defined in Unison.Term

Associated Types

type Rep1 (F typeVar typeAnn patternAnn) :: k -> Type #

Methods

from1 :: forall (a :: k). F typeVar typeAnn patternAnn a -> Rep1 (F typeVar typeAnn patternAnn) a #

to1 :: forall (a :: k). Rep1 (F typeVar typeAnn patternAnn) a -> F typeVar typeAnn patternAnn a #

Foldable (F typeVar typeAnn patternAnn) Source # 
Instance details

Defined in Unison.Term

Methods

fold :: Monoid m => F typeVar typeAnn patternAnn m -> m #

foldMap :: Monoid m => (a -> m) -> F typeVar typeAnn patternAnn a -> m #

foldMap' :: Monoid m => (a -> m) -> F typeVar typeAnn patternAnn a -> m #

foldr :: (a -> b -> b) -> b -> F typeVar typeAnn patternAnn a -> b #

foldr' :: (a -> b -> b) -> b -> F typeVar typeAnn patternAnn a -> b #

foldl :: (b -> a -> b) -> b -> F typeVar typeAnn patternAnn a -> b #

foldl' :: (b -> a -> b) -> b -> F typeVar typeAnn patternAnn a -> b #

foldr1 :: (a -> a -> a) -> F typeVar typeAnn patternAnn a -> a #

foldl1 :: (a -> a -> a) -> F typeVar typeAnn patternAnn a -> a #

toList :: F typeVar typeAnn patternAnn a -> [a] #

null :: F typeVar typeAnn patternAnn a -> Bool #

length :: F typeVar typeAnn patternAnn a -> Int #

elem :: Eq a => a -> F typeVar typeAnn patternAnn a -> Bool #

maximum :: Ord a => F typeVar typeAnn patternAnn a -> a #

minimum :: Ord a => F typeVar typeAnn patternAnn a -> a #

sum :: Num a => F typeVar typeAnn patternAnn a -> a #

product :: Num a => F typeVar typeAnn patternAnn a -> a #

Traversable (F typeVar typeAnn patternAnn) Source # 
Instance details

Defined in Unison.Term

Methods

traverse :: Applicative f => (a -> f b) -> F typeVar typeAnn patternAnn a -> f (F typeVar typeAnn patternAnn b) #

sequenceA :: Applicative f => F typeVar typeAnn patternAnn (f a) -> f (F typeVar typeAnn patternAnn a) #

mapM :: Monad m => (a -> m b) -> F typeVar typeAnn patternAnn a -> m (F typeVar typeAnn patternAnn b) #

sequence :: Monad m => F typeVar typeAnn patternAnn (m a) -> m (F typeVar typeAnn patternAnn a) #

Functor (F typeVar typeAnn patternAnn) Source # 
Instance details

Defined in Unison.Term

Methods

fmap :: (a -> b) -> F typeVar typeAnn patternAnn a -> F typeVar typeAnn patternAnn b #

(<$) :: a -> F typeVar typeAnn patternAnn b -> F typeVar typeAnn patternAnn a #

Generic (F typeVar typeAnn patternAnn a) Source # 
Instance details

Defined in Unison.Term

Associated Types

type Rep (F typeVar typeAnn patternAnn a) :: Type -> Type #

Methods

from :: F typeVar typeAnn patternAnn a -> Rep (F typeVar typeAnn patternAnn a) x #

to :: Rep (F typeVar typeAnn patternAnn a) x -> F typeVar typeAnn patternAnn a #

(Show v, Show a) => Show (F v a0 p a) Source # 
Instance details

Defined in Unison.Term

Methods

showsPrec :: Int -> F v a0 p a -> ShowS #

show :: F v a0 p a -> String #

showList :: [F v a0 p a] -> ShowS #

(Var vt, Eq at, Eq a) => Eq (F vt at p a) Source # 
Instance details

Defined in Unison.Term

Methods

(==) :: F vt at p a -> F vt at p a -> Bool #

(/=) :: F vt at p a -> F vt at p a -> Bool #

(Var typeVar, Ord typeAnn, Ord a, Ord patternAnn) => Ord (F typeVar typeAnn patternAnn a) Source # 
Instance details

Defined in Unison.Term

Methods

compare :: F typeVar typeAnn patternAnn a -> F typeVar typeAnn patternAnn a -> Ordering #

(<) :: F typeVar typeAnn patternAnn a -> F typeVar typeAnn patternAnn a -> Bool #

(<=) :: F typeVar typeAnn patternAnn a -> F typeVar typeAnn patternAnn a -> Bool #

(>) :: F typeVar typeAnn patternAnn a -> F typeVar typeAnn patternAnn a -> Bool #

(>=) :: F typeVar typeAnn patternAnn a -> F typeVar typeAnn patternAnn a -> Bool #

max :: F typeVar typeAnn patternAnn a -> F typeVar typeAnn patternAnn a -> F typeVar typeAnn patternAnn a #

min :: F typeVar typeAnn patternAnn a -> F typeVar typeAnn patternAnn a -> F typeVar typeAnn patternAnn a #

type Rep1 (F typeVar typeAnn patternAnn :: Type -> Type) Source # 
Instance details

Defined in Unison.Term

type Rep1 (F typeVar typeAnn patternAnn :: Type -> Type) = D1 ('MetaData "F" "Unison.Term" "unison-core1-0.0.0-Kp7ZcNnt5XdB8ImvFwyntI" 'False) ((((C1 ('MetaCons "Int" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int64)) :+: C1 ('MetaCons "Nat" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Word64))) :+: (C1 ('MetaCons "Float" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Double)) :+: (C1 ('MetaCons "Boolean" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool)) :+: C1 ('MetaCons "Text" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text))))) :+: ((C1 ('MetaCons "Char" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Char)) :+: (C1 ('MetaCons "Blank" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Blank typeAnn))) :+: C1 ('MetaCons "Ref" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Reference)))) :+: (C1 ('MetaCons "Constructor" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ConstructorReference)) :+: (C1 ('MetaCons "Request" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ConstructorReference)) :+: C1 ('MetaCons "Handle" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1 :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1))))) :+: (((C1 ('MetaCons "App" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1 :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1) :+: (C1 ('MetaCons "Ann" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1 :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Type typeVar typeAnn))) :+: C1 ('MetaCons "List" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 Seq)))) :+: (C1 ('MetaCons "If" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1 :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1 :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1)) :+: (C1 ('MetaCons "And" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1 :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1) :+: C1 ('MetaCons "Or" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1 :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1)))) :+: ((C1 ('MetaCons "Lam" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1) :+: (C1 ('MetaCons "LetRec" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 IsTop) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 List) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1)) :+: C1 ('MetaCons "Let" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 IsTop) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1 :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1)))) :+: (C1 ('MetaCons "Match" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1 :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (List :.: Rec1 (MatchCase patternAnn))) :+: (C1 ('MetaCons "TermLink" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Referent)) :+: C1 ('MetaCons "TypeLink" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Reference)))))))
type Rep (F typeVar typeAnn patternAnn a) Source # 
Instance details

Defined in Unison.Term

type Rep (F typeVar typeAnn patternAnn a) = D1 ('MetaData "F" "Unison.Term" "unison-core1-0.0.0-Kp7ZcNnt5XdB8ImvFwyntI" 'False) ((((C1 ('MetaCons "Int" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int64)) :+: C1 ('MetaCons "Nat" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Word64))) :+: (C1 ('MetaCons "Float" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Double)) :+: (C1 ('MetaCons "Boolean" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool)) :+: C1 ('MetaCons "Text" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text))))) :+: ((C1 ('MetaCons "Char" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Char)) :+: (C1 ('MetaCons "Blank" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Blank typeAnn))) :+: C1 ('MetaCons "Ref" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Reference)))) :+: (C1 ('MetaCons "Constructor" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ConstructorReference)) :+: (C1 ('MetaCons "Request" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ConstructorReference)) :+: C1 ('MetaCons "Handle" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))))) :+: (((C1 ('MetaCons "App" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)) :+: (C1 ('MetaCons "Ann" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Type typeVar typeAnn))) :+: C1 ('MetaCons "List" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Seq a))))) :+: (C1 ('MetaCons "If" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a))) :+: (C1 ('MetaCons "And" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)) :+: C1 ('MetaCons "Or" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a))))) :+: ((C1 ('MetaCons "Lam" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)) :+: (C1 ('MetaCons "LetRec" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 IsTop) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [a]) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a))) :+: C1 ('MetaCons "Let" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 IsTop) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a))))) :+: (C1 ('MetaCons "Match" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [MatchCase patternAnn a])) :+: (C1 ('MetaCons "TermLink" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Referent)) :+: C1 ('MetaCons "TypeLink" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Reference)))))))

_Ref :: Prism' (F tv ta pa a) Reference Source #

_Match :: Prism' (F tv ta pa a) (a, [MatchCase pa a]) Source #

_Ann :: Prism' (F tv ta pa a) (a, Term F tv ta) Source #

_TermLink :: Prism' (F tv ta pa a) Referent Source #

getTypeAnnotation :: Term v a -> Maybe (Type v a) Source #

Returns the top-level type annotation for a term if it has one.

type Term v a = Term2 v a a v a Source #

Like `Term v`, but with an annotation of type a at every level in the tree

type Term' vt v a = Term2 vt a a v a Source #

Allow type variables and term variables to differ

type Term2 vt at ap v a = Term (F vt at ap) v a Source #

Allow type variables, term variables, type annotations and term annotations to all differ

type Term3 v a = Term2 v () () v a Source #

Like `Term v a`, but with only () for type and pattern annotations.

type Term0 v = Term v () Source #

Terms are represented as ABTs over the base functor F, with variables in v

type Term0' vt v = Term' vt v () Source #

Terms with type variables in vt, and term variables in v

bindNames :: forall v a. Var v => (v -> Name) -> (Name -> v) -> Set v -> Names -> Term v a -> ResolutionResult a (Term v a) Source #

prepareTDNR :: Var v => Term (F vt b ap) v b -> Term (F vt b ap) v b Source #

amap :: Ord v => (a -> a2) -> Term v a -> Term v a2 Source #

patternMap :: (Pattern ap -> Pattern ap2) -> Term2 vt at ap v a -> Term2 vt at ap2 v a Source #

vmap :: Ord v2 => (v -> v2) -> Term v a -> Term v2 a Source #

vtmap :: Ord vt2 => (vt -> vt2) -> Term' vt v a -> Term' vt2 v a Source #

typeMap :: Ord vt2 => (Type vt at -> Type vt2 at2) -> Term2 vt at ap v a -> Term2 vt2 at2 ap v a Source #

extraMap' :: (Ord vt, Ord vt') => (vt -> vt') -> (at -> at') -> (ap -> ap') -> Term2 vt at ap v a -> Term2 vt' at' ap' v a Source #

extraMap :: (Ord vt, Ord vt') => (vt -> vt') -> (at -> at') -> (ap -> ap') -> F vt at ap a -> F vt' at' ap' a Source #

matchCaseExtraMap :: (loc -> loc') -> MatchCase loc a -> MatchCase loc' a Source #

unannotate :: forall vt at ap v a. Ord v => Term2 vt at ap v a -> Term0' vt v Source #

wrapV :: Ord v => Term v a -> Term (V v) a Source #

allVars :: Ord v => Term v a -> Set v Source #

All variables mentioned in the given term. Includes both term and type variables, both free and bound.

freeVars :: Term' vt v a -> Set v Source #

freeTypeVars :: Ord vt => Term' vt v a -> Set vt Source #

freeTypeVarAnnotations :: Ord vt => Term' vt v a -> Map vt [a] Source #

substTypeVars :: (Ord v, Var vt) => [(vt, Type vt b)] -> Term' vt v a -> Term' vt v a Source #

substTypeVar :: (Ord v, Var vt) => vt -> Type vt b -> Term' vt v a -> Term' vt v a Source #

renameTypeVar :: (Ord v, Var vt) => vt -> vt -> Term' vt v a -> Term' vt v a Source #

generalizeTypeSignatures :: (Var vt, Var v) => Term' vt v a -> Term' vt v a Source #

pattern Var' :: v -> Term f v a Source #

pattern Cycle' :: [v] -> f (Term f v a) -> Term f v a Source #

pattern Abs' :: (Foldable f, Functor f, Var v) => Subst f v a -> Term f v a Source #

pattern Int' :: Int64 -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern Nat' :: Word64 -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern Float' :: Double -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern Boolean' :: Bool -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern Text' :: Text -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern Char' :: Char -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern Blank' :: Blank typeAnn -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern Ref' :: Reference -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern TermLink' :: Referent -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern TypeLink' :: Reference -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern Builtin' :: Text -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern App' :: Term (F typeVar typeAnn patternAnn) v a -> Term (F typeVar typeAnn patternAnn) v a -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern Match' :: Term (F typeVar typeAnn patternAnn) v a -> [MatchCase patternAnn (Term (F typeVar typeAnn patternAnn) v a)] -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern Constructor' :: ConstructorReference -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern Request' :: ConstructorReference -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern RequestOrCtor' :: ConstructorReference -> Term2 vt at ap v a Source #

pattern If' :: Term (F typeVar typeAnn patternAnn) v a -> Term (F typeVar typeAnn patternAnn) v a -> Term (F typeVar typeAnn patternAnn) v a -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern And' :: Term (F typeVar typeAnn patternAnn) v a -> Term (F typeVar typeAnn patternAnn) v a -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern Or' :: Term (F typeVar typeAnn patternAnn) v a -> Term (F typeVar typeAnn patternAnn) v a -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern Handle' :: Term (F typeVar typeAnn patternAnn) v a -> Term (F typeVar typeAnn patternAnn) v a -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern Apps' :: Term2 vt at ap v a -> [Term2 vt at ap v a] -> Term2 vt at ap v a Source #

pattern Ands' :: [Term2 vt at ap v a] -> Term2 vt at ap v a -> Term2 vt at ap v a Source #

pattern Ors' :: [Term2 vt at ap v a] -> Term2 vt at ap v a -> Term2 vt at ap v a Source #

pattern AppsPred' :: Term2 vt at ap v a -> [Term2 vt at ap v a] -> (Term2 vt at ap v a, Term2 vt at ap v a -> Bool) Source #

pattern BinaryApp' :: Term2 vt at ap v a -> Term2 vt at ap v a -> Term2 vt at ap v a -> Term2 vt at ap v a Source #

pattern BinaryApps' :: [(Term2 vt at ap v a, Term2 vt at ap v a)] -> Term2 vt at ap v a -> Term2 vt at ap v a Source #

pattern BinaryAppsPred' :: [(Term2 vt at ap v a, Term2 vt at ap v a)] -> Term2 vt at ap v a -> (Term2 vt at ap v a, Term2 vt at ap v a -> Bool) Source #

pattern BinaryAppPred' :: Term2 vt at ap v a -> Term2 vt at ap v a -> Term2 vt at ap v a -> (Term2 vt at ap v a, Term2 vt at ap v a -> Bool) Source #

pattern OverappliedBinaryAppPred' :: Term2 vt at ap v a -> Term2 vt at ap v a -> Term2 vt at ap v a -> [Term2 vt at ap v a] -> (Term2 vt at ap v a, Term2 vt at ap v a -> Bool) Source #

pattern Ann' :: Term (F typeVar typeAnn patternAnn) v a -> Type typeVar typeAnn -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern List' :: Seq (Term (F typeVar typeAnn patternAnn) v a) -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern Lam' :: Var v => Subst (F typeVar typeAnn patternAnn) v a -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern Delay' :: Var v => Term2 vt at ap v a -> Term2 vt at ap v a Source #

unDelay :: Var v => Term2 vt at ap v a -> Maybe (Term2 vt at ap v a) Source #

pattern LamNamed' :: v -> Term (F typeVar typeAnn patternAnn) v a -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern LamsNamed' :: [v] -> Term2 vt at ap v a -> Term2 vt at ap v a Source #

pattern LamsNamedOpt' :: [v] -> Term2 vt at ap v a -> Term2 vt at ap v a Source #

pattern LamsNamedPred' :: [v] -> Term2 vt at ap v a -> (Term2 vt at ap v a, v -> Bool) Source #

pattern LamsNamedOrDelay' :: Var v => [v] -> Term2 vt at ap v a -> Term2 vt at ap v a Source #

pattern Let1' :: Var v => Term' vt v a -> Subst (F vt a a) v a -> Term' vt v a Source #

pattern Let1Top' :: Var v => IsTop -> Term' vt v a -> Subst (F vt a a) v a -> Term' vt v a Source #

pattern Let1Named' :: v -> Term (F typeVar typeAnn patternAnn) v a -> Term (F typeVar typeAnn patternAnn) v a -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern Let1NamedTop' :: IsTop -> v -> Term (F typeVar typeAnn patternAnn) v a -> Term (F typeVar typeAnn patternAnn) v a -> Term (F typeVar typeAnn patternAnn) v a Source #

pattern Lets' :: [(IsTop, v, Term2 vt at ap v a)] -> Term2 vt at ap v a -> Term2 vt at ap v a Source #

pattern LetRecNamed' :: [(v, Term2 vt at ap v a)] -> Term2 vt at ap v a -> Term2 vt at ap v a Source #

pattern LetRecNamedTop' :: IsTop -> [(v, Term2 vt at ap v a)] -> Term2 vt at ap v a -> Term2 vt at ap v a Source #

pattern LetRec' :: (Monad m, Var v) => ((v -> m v) -> m ([(v, Term2 vt at ap v a)], Term2 vt at ap v a)) -> Term2 vt at ap v a Source #

pattern LetRecTop' :: (Monad m, Var v) => IsTop -> ((v -> m v) -> m ([(v, Term2 vt at ap v a)], Term2 vt at ap v a)) -> Term2 vt at ap v a Source #

pattern LetRecNamedAnnotated' :: a -> [((a, v), Term' vt v a)] -> Term' vt v a -> Term' vt v a Source #

pattern LetRecNamedAnnotatedTop' :: IsTop -> a -> [((a, v), Term' vt v a)] -> Term' vt v a -> Term' vt v a Source #

fresh :: Var v => Term0 v -> v -> v Source #

var :: a -> v -> Term2 vt at ap v a Source #

var' :: Var v => Text -> Term0' vt v Source #

ref :: Ord v => a -> Reference -> Term2 vt at ap v a Source #

pattern Referent' :: Referent -> Term2 vt at ap v a Source #

unReferent :: Term2 vt at ap v a -> Maybe Referent Source #

refId :: Ord v => a -> Id -> Term2 vt at ap v a Source #

termLink :: Ord v => a -> Referent -> Term2 vt at ap v a Source #

typeLink :: Ord v => a -> Reference -> Term2 vt at ap v a Source #

builtin :: Ord v => a -> Text -> Term2 vt at ap v a Source #

float :: Ord v => a -> Double -> Term2 vt at ap v a Source #

boolean :: Ord v => a -> Bool -> Term2 vt at ap v a Source #

int :: Ord v => a -> Int64 -> Term2 vt at ap v a Source #

nat :: Ord v => a -> Word64 -> Term2 vt at ap v a Source #

text :: Ord v => a -> Text -> Term2 vt at ap v a Source #

char :: Ord v => a -> Char -> Term2 vt at ap v a Source #

watch :: (Var v, Semigroup a) => a -> String -> Term v a -> Term v a Source #

watchMaybe :: (Var v, Semigroup a) => Maybe String -> Term v a -> Term v a Source #

blank :: Ord v => a -> Term2 vt at ap v a Source #

placeholder :: Ord v => a -> String -> Term2 vt a ap v a Source #

resolve :: Ord v => at -> ab -> String -> Term2 vt ab ap v at Source #

missingResult :: Ord v => at -> ab -> Term2 vt ab ap v at Source #

constructor :: Ord v => a -> ConstructorReference -> Term2 vt at ap v a Source #

request :: Ord v => a -> ConstructorReference -> Term2 vt at ap v a Source #

app_ :: Ord v => Term0' vt v -> Term0' vt v -> Term0' vt v Source #

app :: Ord v => a -> Term2 vt at ap v a -> Term2 vt at ap v a -> Term2 vt at ap v a Source #

match :: Ord v => a -> Term2 vt at a v a -> [MatchCase a (Term2 vt at a v a)] -> Term2 vt at a v a Source #

handle :: Ord v => a -> Term2 vt at ap v a -> Term2 vt at ap v a -> Term2 vt at ap v a Source #

and :: Ord v => a -> Term2 vt at ap v a -> Term2 vt at ap v a -> Term2 vt at ap v a Source #

or :: Ord v => a -> Term2 vt at ap v a -> Term2 vt at ap v a -> Term2 vt at ap v a Source #

list :: Ord v => a -> [Term2 vt at ap v a] -> Term2 vt at ap v a Source #

list' :: Ord v => a -> Seq (Term2 vt at ap v a) -> Term2 vt at ap v a Source #

apps :: Ord v => Term2 vt at ap v a -> [(a, Term2 vt at ap v a)] -> Term2 vt at ap v a Source #

apps' :: (Ord v, Semigroup a) => Term2 vt at ap v a -> [Term2 vt at ap v a] -> Term2 vt at ap v a Source #

iff :: Ord v => a -> Term2 vt at ap v a -> Term2 vt at ap v a -> Term2 vt at ap v a -> Term2 vt at ap v a Source #

ann_ :: Ord v => Term0' vt v -> Type vt () -> Term0' vt v Source #

ann :: Ord v => a -> Term2 vt at ap v a -> Type vt at -> Term2 vt at ap v a Source #

lam Source #

Arguments

:: Ord v 
=> a

Annotation of the whole lambda

-> (a, v) 
-> Term2 vt at ap v a 
-> Term2 vt at ap v a 

Add a lambda with a single argument.

lam' Source #

Arguments

:: Ord v 
=> a

Annotation of the whole lambda

-> [(a, v)] 
-> Term2 vt at ap v a 
-> Term2 vt at ap v a 

Add a lambda with a list of arguments.

lamWithoutBindingAnns :: Ord v => a -> [v] -> Term2 vt at ap v a -> Term2 vt at ap v a Source #

Only use this variant if you don't have source annotations for the binding arguments available.

delay :: Var v => a -> Term2 vt at ap v a -> Term2 vt at ap v a Source #

isLam :: Term2 vt at ap v a -> Bool Source #

arity :: Term2 vt at ap v a -> Int Source #

unLetRecNamedAnnotated :: Term' vt v a -> Maybe (IsTop, a, [((a, v), Term' vt v a)], Term' vt v a) Source #

letRec' :: (Ord v, Monoid a) => Bool -> [(v, a, Term' vt v a)] -> Term' vt v a -> Term' vt v a Source #

consLetRec :: (Ord v, Semigroup a) => Bool -> a -> (a, v, Term' vt v a) -> Term' vt v a -> Term' vt v a Source #

letRec :: forall v vt a. Ord v => Bool -> a -> [((a, v), Term' vt v a)] -> Term' vt v a -> Term' vt v a Source #

letRec_ :: Ord v => IsTop -> [(v, Term0' vt v)] -> Term0' vt v -> Term0' vt v Source #

Smart constructor for let rec blocks. Each binding in the block may reference any other binding in the block in its body (including itself), and the output expression may also reference any binding in the block.

let1_ :: Ord v => IsTop -> [(v, Term0' vt v)] -> Term0' vt v -> Term0' vt v Source #

Smart constructor for let blocks. Each binding in the block may reference only previous bindings in the block, not including itself. The output expression may reference any binding in the block. todo: delete me

let1 :: (Ord v, Semigroup a) => IsTop -> [((a, v), Term2 vt at ap v a)] -> Term2 vt at ap v a -> Term2 vt at ap v a Source #

annotations are applied to each nested Let expression

let1' :: (Semigroup a, Ord v) => IsTop -> [(v, Term2 vt at ap v a)] -> Term2 vt at ap v a -> Term2 vt at ap v a Source #

singleLet :: Ord v => IsTop -> a -> a -> (v, Term2 vt at ap v a) -> Term2 vt at ap v a -> Term2 vt at ap v a Source #

Like let1, but for a single binding, avoiding the Semigroup constraint.

unLet1 :: Var v => Term' vt v a -> Maybe (IsTop, Term' vt v a, Subst (F vt a a) v a) Source #

unLet :: Term2 vt at ap v a -> Maybe ([(IsTop, v, Term2 vt at ap v a)], Term2 vt at ap v a) Source #

Satisfies `unLet (let' bs e) == Just (bs, e)`

unLetRecNamed :: Term2 vt at ap v a -> Maybe (IsTop, [(v, Term2 vt at ap v a)], Term2 vt at ap v a) Source #

Satisfies `unLetRec (letRec bs e) == Just (bs, e)`

unLetRec :: (Monad m, Var v) => Term2 vt at ap v a -> Maybe (IsTop, (v -> m v) -> m ([(v, Term2 vt at ap v a)], Term2 vt at ap v a)) Source #

unAnds :: Term2 vt at ap v a -> Maybe ([Term2 vt at ap v a], Term2 vt at ap v a) Source #

unOrs :: Term2 vt at ap v a -> Maybe ([Term2 vt at ap v a], Term2 vt at ap v a) Source #

unApps :: Term2 vt at ap v a -> Maybe (Term2 vt at ap v a, [Term2 vt at ap v a]) Source #

unAppsPred :: (Term2 vt at ap v a, Term2 vt at ap v a -> Bool) -> Maybe (Term2 vt at ap v a, [Term2 vt at ap v a]) Source #

unBinaryApp :: Term2 vt at ap v a -> Maybe (Term2 vt at ap v a, Term2 vt at ap v a, Term2 vt at ap v a) Source #

unOverappliedBinaryAppPred :: (Term2 vt at ap v a, Term2 vt at ap v a -> Bool) -> Maybe (Term2 vt at ap v a, Term2 vt at ap v a, Term2 vt at ap v a, [Term2 vt at ap v a]) Source #

unBinaryApps :: Term2 vt at ap v a -> Maybe ([(Term2 vt at ap v a, Term2 vt at ap v a)], Term2 vt at ap v a) Source #

unBinaryAppsPred :: (Term2 vt at ap v a, Term2 vt at ap v a -> Bool) -> Maybe ([(Term2 vt at ap v a, Term2 vt at ap v a)], Term2 vt at ap v a) Source #

unBinaryAppPred :: (Term2 vt at ap v a, Term2 vt at ap v a -> Bool) -> Maybe (Term2 vt at ap v a, Term2 vt at ap v a, Term2 vt at ap v a) Source #

unLams' :: Term2 vt at ap v a -> Maybe ([v], Term2 vt at ap v a) Source #

unLamsOpt' :: Term2 vt at ap v a -> Maybe ([v], Term2 vt at ap v a) Source #

unLamsUntilDelay' :: Var v => Term2 vt at ap v a -> Maybe ([v], Term2 vt at ap v a) Source #

unLamsPred' :: (Term2 vt at ap v a, v -> Bool) -> Maybe ([v], Term2 vt at ap v a) Source #

termDependencies :: (Ord v, Ord vt) => Term2 vt at ap v a -> Set TermReference Source #

typeDependencies :: (Ord v, Ord vt) => Term2 vt at ap v a -> Set Reference Source #

constructorDependencies :: (Ord v, Ord vt) => Term2 vt at ap v a -> Set Reference Source #

generalizedDependencies :: (Ord v, Ord vt, Ord r) => (Reference -> r) -> (Reference -> r) -> (Reference -> r) -> (Reference -> ConstructorId -> r) -> (Reference -> r) -> (Reference -> ConstructorId -> r) -> (Reference -> r) -> Term2 vt at ap v a -> Set r Source #

betaReduce :: Var v => Term0 v -> Term0 v Source #

If the outermost term is a function application, perform substitution of the argument into the body

unhashComponent :: forall v a. Var v => Map Id (Term v a) -> Map Id (v, Term v a) Source #

fromReferent :: Ord v => a -> Referent -> Term2 vt at ap v a Source #

containsExpression :: (Var v, Var typeVar, Eq typeAnn) => Term2 typeVar typeAnn loc v a -> Term2 typeVar typeAnn loc v a -> Bool Source #

containsCaseTerm :: Var v1 => Term2 tv ta tb v1 loc -> Term2 typeVar typeAnn loc v2 a -> Maybe Bool Source #

containsCase :: Pattern loc -> Term2 typeVar typeAnn loc v a -> Bool Source #

containsSignature :: (Ord v, Var vt, Show vt) => Type vt at -> Term2 vt at ap v a -> Bool Source #

rewriteSignatures :: (Ord v, Var vt, Show vt) => Type vt at -> Type vt at -> Term2 vt at ap v a -> Maybe (Term2 vt at ap v a) Source #

rewriteCasesLHS :: forall v typeVar typeAnn a. (Var v, Var typeVar, Ord v, Show typeVar, Eq typeAnn, Semigroup a) => Term2 typeVar typeAnn a v a -> Term2 typeVar typeAnn a v a -> Term2 typeVar typeAnn a v a -> Maybe (Term2 typeVar typeAnn a v a) Source #

toPattern :: Var v => Term2 tv ta tb v loc -> Maybe (Pattern loc) Source #

matchCaseFromTerm :: Var v => Term2 typeVar typeAnn a v a -> Maybe (MatchCase a (Term2 typeVar typeAnn a v a)) Source #

matchCaseToTerm :: (Semigroup a, Ord v) => MatchCase a (Term2 typeVar typeAnn a v a) -> Term2 typeVar typeAnn a v a Source #