Type synonym using the TypeOf type family to specify HasSource
constraints without having to specify the type associated to a tag.
Modulecapability-0.5.0.1Haskell2010
Capability.Source
Defines a capability for computations that consume a stream of values as part of their execution.
Programs comsuming streams of data are common. Examples: rolling up input events. Sources are similar to Python generators.
This can be thought of as a reader capability where there's no guarantee that one reads the same value each time.
The HasSource capability enables separating the logic responsible for
emitting events from that responsible for collecting or handling them.
The name is because a source is needed to produce the locally consumed stream.
- 1 type
- Packagecapability-0.5.0.1
- Exports2
- LanguageHaskell2010
- LicenceBSD-3-Clause
- SourceSource.hs
Relational capability
0 declarationsFunctional capability
2 declarationsType family associating a tag to the corresponding type. It is intended to simplify constraint declarations, by removing the need to redundantly specify the type associated to a tag.
It is poly-kinded, which allows users to define their own kind of tags. Standard haskell types can also be used as tags by specifying the Type kind when defining the type family instance.
Defining TypeOf instances for GHC.TypeLits.Symbols (typelevel string
literals) is discouraged. Since symbols all belong to the same global
namespace, such instances could conflict with others defined in external
libraries. More generally, as for typeclasses, TypeOf instances should
always be defined in the same module as the tag type to prevent issues due to
orphan instances.
Example:
import Capability.Reader
data Foo
data Bar
type instance TypeOf Type Foo = Int
type instance TypeOf Type Bar = String
-- Same as: foo :: HasReader Foo Int M => …
foo :: HasReader' Foo m => …
foo = …
Strategies
0 declarationsModifiers
module Capability.Accessors