symantic-parser-0.0.0.20210102: Parser combinators statically optimized and staged via typed meta-programming
Safe HaskellNone
LanguageHaskell2010

Symantic.Parser.Grammar.ObserveSharing

Synopsis

Documentation

observeSharing :: ObserveSharing Name repr a -> repr a Source #

Like observeSharing but type-binding (letName) to Name to help type inference.

newtype ObserveSharing letName repr a Source #

Interpreter detecting some (Haskell embedded) let definitions used at least once and/or recursively, in order to replace them with the def and ref combinators. See Type-safe observable sharing in Haskell

Constructors

ObserveSharing 

Instances

Instances details
(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName) => Letable letName (ObserveSharing letName repr) Source # 
Instance details

Defined in Symantic.Univariant.Letable

Methods

def :: letName -> ObserveSharing letName repr a -> ObserveSharing letName repr a Source #

ref :: Bool -> letName -> ObserveSharing letName repr a Source #

(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName, Lookable repr) => Lookable (ObserveSharing letName repr) Source # 
Instance details

Defined in Symantic.Parser.Grammar.ObserveSharing

Methods

look :: ObserveSharing letName repr a -> ObserveSharing letName repr a Source #

negLook :: ObserveSharing letName repr a -> ObserveSharing letName repr () Source #

eof :: ObserveSharing letName repr () Source #

(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName, Foldable repr, Applicable repr, Alternable repr) => Foldable (ObserveSharing letName repr) Source # 
Instance details

Defined in Symantic.Parser.Grammar.ObserveSharing

Methods

chainPre :: ObserveSharing letName repr (a -> a) -> ObserveSharing letName repr a -> ObserveSharing letName repr a Source #

chainPost :: ObserveSharing letName repr a -> ObserveSharing letName repr (a -> a) -> ObserveSharing letName repr a Source #

(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName, Matchable repr) => Matchable (ObserveSharing letName repr) Source # 
Instance details

Defined in Symantic.Parser.Grammar.ObserveSharing

Methods

conditional :: Eq a => [Haskell (a -> Bool)] -> [ObserveSharing letName repr b] -> ObserveSharing letName repr a -> ObserveSharing letName repr b -> ObserveSharing letName repr b Source #

match :: Eq a => [Haskell a] -> ObserveSharing letName repr a -> (Haskell a -> ObserveSharing letName repr b) -> ObserveSharing letName repr b -> ObserveSharing letName repr b Source #

(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName, Selectable repr) => Selectable (ObserveSharing letName repr) Source # 
Instance details

Defined in Symantic.Parser.Grammar.ObserveSharing

Methods

branch :: ObserveSharing letName repr (Either a b) -> ObserveSharing letName repr (a -> c) -> ObserveSharing letName repr (b -> c) -> ObserveSharing letName repr c Source #

(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName, Alternable repr) => Alternable (ObserveSharing letName repr) Source # 
Instance details

Defined in Symantic.Parser.Grammar.ObserveSharing

Methods

(<|>) :: ObserveSharing letName repr a -> ObserveSharing letName repr a -> ObserveSharing letName repr a Source #

empty :: ObserveSharing letName repr a Source #

try :: ObserveSharing letName repr a -> ObserveSharing letName repr a Source #

(<+>) :: (Applicable (ObserveSharing letName repr), Alternable (ObserveSharing letName repr)) => ObserveSharing letName repr a -> ObserveSharing letName repr b -> ObserveSharing letName repr (Either a b) Source #

(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName, Applicable repr) => Applicable (ObserveSharing letName repr) Source # 
Instance details

Defined in Symantic.Parser.Grammar.ObserveSharing

Methods

(<$>) :: Haskell (a -> b) -> ObserveSharing letName repr a -> ObserveSharing letName repr b Source #

(<&>) :: ObserveSharing letName repr a -> Haskell (a -> b) -> ObserveSharing letName repr b Source #

(<$) :: Haskell a -> ObserveSharing letName repr b -> ObserveSharing letName repr a Source #

($>) :: ObserveSharing letName repr a -> Haskell b -> ObserveSharing letName repr b Source #

pure :: Haskell a -> ObserveSharing letName repr a Source #

(<*>) :: ObserveSharing letName repr (a -> b) -> ObserveSharing letName repr a -> ObserveSharing letName repr b Source #

liftA2 :: Haskell (a -> b -> c) -> ObserveSharing letName repr a -> ObserveSharing letName repr b -> ObserveSharing letName repr c Source #

(<*) :: ObserveSharing letName repr a -> ObserveSharing letName repr b -> ObserveSharing letName repr a Source #

(*>) :: ObserveSharing letName repr a -> ObserveSharing letName repr b -> ObserveSharing letName repr b Source #

(<**>) :: ObserveSharing letName repr a -> ObserveSharing letName repr (a -> b) -> ObserveSharing letName repr b Source #

(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName, Satisfiable repr tok) => Satisfiable (ObserveSharing letName repr) tok Source # 
Instance details

Defined in Symantic.Parser.Grammar.ObserveSharing

Methods

satisfy :: [ErrorItem tok] -> Haskell (tok -> Bool) -> ObserveSharing letName repr tok Source #

(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName) => Trans3 (CleanDefs letName repr) (ObserveSharing letName repr) Source # 
Instance details

Defined in Symantic.Univariant.Letable

Methods

trans3 :: (CleanDefs letName repr a -> CleanDefs letName repr b -> CleanDefs letName repr c -> CleanDefs letName repr d) -> ObserveSharing letName repr a -> ObserveSharing letName repr b -> ObserveSharing letName repr c -> ObserveSharing letName repr d Source #

(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName) => Trans2 (CleanDefs letName repr) (ObserveSharing letName repr) Source # 
Instance details

Defined in Symantic.Univariant.Letable

Methods

trans2 :: (CleanDefs letName repr a -> CleanDefs letName repr b -> CleanDefs letName repr c) -> ObserveSharing letName repr a -> ObserveSharing letName repr b -> ObserveSharing letName repr c Source #

(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName) => Trans1 (CleanDefs letName repr) (ObserveSharing letName repr) Source # 
Instance details

Defined in Symantic.Univariant.Letable

Methods

trans1 :: (CleanDefs letName repr a -> CleanDefs letName repr b) -> ObserveSharing letName repr a -> ObserveSharing letName repr b Source #

(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName) => Trans (CleanDefs letName repr) (ObserveSharing letName repr) Source # 
Instance details

Defined in Symantic.Univariant.Letable

Methods

trans :: CleanDefs letName repr a -> ObserveSharing letName repr a Source #

type Output (ObserveSharing letName repr) Source # 
Instance details

Defined in Symantic.Univariant.Letable

type Output (ObserveSharing letName repr) = CleanDefs letName repr

Orphan instances

Hashable Name Source # 
Instance details

Methods

hashWithSalt :: Int -> Name -> Int #

hash :: Name -> Int #

Lookable repr => Lookable (CleanDefs letName repr) Source # 
Instance details

Methods

look :: CleanDefs letName repr a -> CleanDefs letName repr a Source #

negLook :: CleanDefs letName repr a -> CleanDefs letName repr () Source #

eof :: CleanDefs letName repr () Source #

(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName, Lookable repr) => Lookable (ObserveSharing letName repr) Source # 
Instance details

Methods

look :: ObserveSharing letName repr a -> ObserveSharing letName repr a Source #

negLook :: ObserveSharing letName repr a -> ObserveSharing letName repr () Source #

eof :: ObserveSharing letName repr () Source #

Foldable repr => Foldable (CleanDefs letName repr) Source # 
Instance details

Methods

chainPre :: CleanDefs letName repr (a -> a) -> CleanDefs letName repr a -> CleanDefs letName repr a Source #

chainPost :: CleanDefs letName repr a -> CleanDefs letName repr (a -> a) -> CleanDefs letName repr a Source #

(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName, Foldable repr, Applicable repr, Alternable repr) => Foldable (ObserveSharing letName repr) Source # 
Instance details

Methods

chainPre :: ObserveSharing letName repr (a -> a) -> ObserveSharing letName repr a -> ObserveSharing letName repr a Source #

chainPost :: ObserveSharing letName repr a -> ObserveSharing letName repr (a -> a) -> ObserveSharing letName repr a Source #

Matchable repr => Matchable (CleanDefs letName repr) Source # 
Instance details

Methods

conditional :: Eq a => [Haskell (a -> Bool)] -> [CleanDefs letName repr b] -> CleanDefs letName repr a -> CleanDefs letName repr b -> CleanDefs letName repr b Source #

match :: Eq a => [Haskell a] -> CleanDefs letName repr a -> (Haskell a -> CleanDefs letName repr b) -> CleanDefs letName repr b -> CleanDefs letName repr b Source #

(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName, Matchable repr) => Matchable (ObserveSharing letName repr) Source # 
Instance details

Methods

conditional :: Eq a => [Haskell (a -> Bool)] -> [ObserveSharing letName repr b] -> ObserveSharing letName repr a -> ObserveSharing letName repr b -> ObserveSharing letName repr b Source #

match :: Eq a => [Haskell a] -> ObserveSharing letName repr a -> (Haskell a -> ObserveSharing letName repr b) -> ObserveSharing letName repr b -> ObserveSharing letName repr b Source #

Selectable repr => Selectable (CleanDefs letName repr) Source # 
Instance details

Methods

branch :: CleanDefs letName repr (Either a b) -> CleanDefs letName repr (a -> c) -> CleanDefs letName repr (b -> c) -> CleanDefs letName repr c Source #

(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName, Selectable repr) => Selectable (ObserveSharing letName repr) Source # 
Instance details

Methods

branch :: ObserveSharing letName repr (Either a b) -> ObserveSharing letName repr (a -> c) -> ObserveSharing letName repr (b -> c) -> ObserveSharing letName repr c Source #

Alternable repr => Alternable (CleanDefs letName repr) Source # 
Instance details

Methods

(<|>) :: CleanDefs letName repr a -> CleanDefs letName repr a -> CleanDefs letName repr a Source #

empty :: CleanDefs letName repr a Source #

try :: CleanDefs letName repr a -> CleanDefs letName repr a Source #

(<+>) :: (Applicable (CleanDefs letName repr), Alternable (CleanDefs letName repr)) => CleanDefs letName repr a -> CleanDefs letName repr b -> CleanDefs letName repr (Either a b) Source #

(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName, Alternable repr) => Alternable (ObserveSharing letName repr) Source # 
Instance details

Methods

(<|>) :: ObserveSharing letName repr a -> ObserveSharing letName repr a -> ObserveSharing letName repr a Source #

empty :: ObserveSharing letName repr a Source #

try :: ObserveSharing letName repr a -> ObserveSharing letName repr a Source #

(<+>) :: (Applicable (ObserveSharing letName repr), Alternable (ObserveSharing letName repr)) => ObserveSharing letName repr a -> ObserveSharing letName repr b -> ObserveSharing letName repr (Either a b) Source #

Applicable repr => Applicable (CleanDefs letName repr) Source # 
Instance details

Methods

(<$>) :: Haskell (a -> b) -> CleanDefs letName repr a -> CleanDefs letName repr b Source #

(<&>) :: CleanDefs letName repr a -> Haskell (a -> b) -> CleanDefs letName repr b Source #

(<$) :: Haskell a -> CleanDefs letName repr b -> CleanDefs letName repr a Source #

($>) :: CleanDefs letName repr a -> Haskell b -> CleanDefs letName repr b Source #

pure :: Haskell a -> CleanDefs letName repr a Source #

(<*>) :: CleanDefs letName repr (a -> b) -> CleanDefs letName repr a -> CleanDefs letName repr b Source #

liftA2 :: Haskell (a -> b -> c) -> CleanDefs letName repr a -> CleanDefs letName repr b -> CleanDefs letName repr c Source #

(<*) :: CleanDefs letName repr a -> CleanDefs letName repr b -> CleanDefs letName repr a Source #

(*>) :: CleanDefs letName repr a -> CleanDefs letName repr b -> CleanDefs letName repr b Source #

(<**>) :: CleanDefs letName repr a -> CleanDefs letName repr (a -> b) -> CleanDefs letName repr b Source #

(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName, Applicable repr) => Applicable (ObserveSharing letName repr) Source # 
Instance details

Methods

(<$>) :: Haskell (a -> b) -> ObserveSharing letName repr a -> ObserveSharing letName repr b Source #

(<&>) :: ObserveSharing letName repr a -> Haskell (a -> b) -> ObserveSharing letName repr b Source #

(<$) :: Haskell a -> ObserveSharing letName repr b -> ObserveSharing letName repr a Source #

($>) :: ObserveSharing letName repr a -> Haskell b -> ObserveSharing letName repr b Source #

pure :: Haskell a -> ObserveSharing letName repr a Source #

(<*>) :: ObserveSharing letName repr (a -> b) -> ObserveSharing letName repr a -> ObserveSharing letName repr b Source #

liftA2 :: Haskell (a -> b -> c) -> ObserveSharing letName repr a -> ObserveSharing letName repr b -> ObserveSharing letName repr c Source #

(<*) :: ObserveSharing letName repr a -> ObserveSharing letName repr b -> ObserveSharing letName repr a Source #

(*>) :: ObserveSharing letName repr a -> ObserveSharing letName repr b -> ObserveSharing letName repr b Source #

(<**>) :: ObserveSharing letName repr a -> ObserveSharing letName repr (a -> b) -> ObserveSharing letName repr b Source #

Satisfiable repr tok => Satisfiable (CleanDefs letName repr) tok Source # 
Instance details

Methods

satisfy :: [ErrorItem tok] -> Haskell (tok -> Bool) -> CleanDefs letName repr tok Source #

(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName, Satisfiable repr tok) => Satisfiable (ObserveSharing letName repr) tok Source # 
Instance details

Methods

satisfy :: [ErrorItem tok] -> Haskell (tok -> Bool) -> ObserveSharing letName repr tok Source #