Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- observeSharing :: ObserveSharing Name repr a -> repr a
- newtype ObserveSharing letName repr a = ObserveSharing {
- unObserveSharing :: ReaderT (HashSet SharingName) (State (ObserveSharingState letName)) (CleanDefs letName repr a)
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
ObserveSharing | |
|
Instances
(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName) => Letable letName (ObserveSharing letName repr) Source # | |
Defined in Symantic.Univariant.Letable 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 # | |
Defined in Symantic.Parser.Grammar.ObserveSharing 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 # | |
Defined in Symantic.Parser.Grammar.ObserveSharing 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 # | |
Defined in Symantic.Parser.Grammar.ObserveSharing 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 # | |
Defined in Symantic.Parser.Grammar.ObserveSharing 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 # | |
Defined in Symantic.Parser.Grammar.ObserveSharing (<|>) :: 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 # | |
Defined in Symantic.Parser.Grammar.ObserveSharing (<$>) :: 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 # | |
Defined in Symantic.Parser.Grammar.ObserveSharing | |
(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName) => Trans3 (CleanDefs letName repr) (ObserveSharing letName repr) Source # | |
Defined in Symantic.Univariant.Letable 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 # | |
Defined in Symantic.Univariant.Letable 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 # | |
Defined in Symantic.Univariant.Letable 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 # | |
Defined in Symantic.Univariant.Letable trans :: CleanDefs letName repr a -> ObserveSharing letName repr a Source # | |
type Output (ObserveSharing letName repr) Source # | |
Defined in Symantic.Univariant.Letable |
Orphan instances
Hashable Name Source # | |
Lookable repr => Lookable (CleanDefs letName repr) Source # | |
(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName, Lookable repr) => Lookable (ObserveSharing letName repr) Source # | |
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 # | |
(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName, Foldable repr, Applicable repr, Alternable repr) => Foldable (ObserveSharing letName repr) Source # | |
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 # | |
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 # | |
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 # | |
(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName, Selectable repr) => Selectable (ObserveSharing letName repr) Source # | |
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 # | |
(<|>) :: 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 # | |
(<|>) :: 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 # | |
(<$>) :: 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 # | |
(<$>) :: 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 # | |
(Letable letName repr, MakeLetName letName, Eq letName, Hashable letName, Satisfiable repr tok) => Satisfiable (ObserveSharing letName repr) tok Source # | |