| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Composite.Record
- data Rec u a b :: forall u. (u -> *) -> [u] -> *
- type Record = Rec * Identity
- newtype Identity a :: * -> * = Identity a
- pattern (:*:) :: forall a rs s. a -> Rec * Identity rs -> Rec * Identity ((:) * ((:->) s a) rs)
- pattern (:^:) :: forall f a rs s. Functor f => f a -> Rec * f rs -> Rec * f ((:) * ((:->) s a) rs)
- pattern Nil :: forall u f. Rec u f ([] u)
- pattern Val :: forall a s. a -> Identity ((:->) s a)
- newtype s :-> a :: Symbol -> * -> * = Col {
- getCol :: a
- rlens :: (Functor g, RElem (s :-> a) rs (RIndex (s :-> a) rs), Functor g) => proxy (s :-> a) -> (a -> g a) -> Rec Identity rs -> g (Rec Identity rs)
- rlens' :: (Functor f, Functor g, RElem (s :-> a) rs (RIndex (s :-> a) rs), Functor g) => proxy (s :-> a) -> (f a -> g (f a)) -> Rec f rs -> g (Rec f rs)
Documentation
data Rec u a b :: forall u. (u -> *) -> [u] -> * #
A record is parameterized by a universe u, an interpretation f and a
list of rows rs. The labels or indices of the record are given by
inhabitants of the kind u; the type of values at any label r :: u is
given by its interpretation f r :: *.
Instances
| TestCoercion u f => TestCoercion [u] (Rec u f) | |
| TestEquality u f => TestEquality [u] (Rec u f) | |
| Eq (Rec u f ([] u)) | |
| (Eq (f r), Eq (Rec a f rs)) => Eq (Rec a f ((:) a r rs)) | |
| Ord (Rec u f ([] u)) | |
| (Ord (f r), Ord (Rec a f rs)) => Ord (Rec a f ((:) a r rs)) | |
| RecAll u f rs Show => Show (Rec u f rs) | Records may be shown insofar as their points may be shown.
|
| Monoid (Rec u f ([] u)) | |
| (Monoid (f r), Monoid (Rec a f rs)) => Monoid (Rec a f ((:) a r rs)) | |
| Storable (Rec u f ([] u)) | |
| (Storable (f r), Storable (Rec a f rs)) => Storable (Rec a f ((:) a r rs)) | |
newtype Identity a :: * -> * #
This is identical to the Identity from Data.Functor.Identity
in "base" except for its Show instance.
Constructors
| Identity a |
pattern (:*:) :: forall a rs s. a -> Rec * Identity rs -> Rec * Identity ((:) * ((:->) s a) rs) infixr 5 Source #
pattern (:^:) :: forall f a rs s. Functor f => f a -> Rec * f rs -> Rec * f ((:) * ((:->) s a) rs) infixr 5 Source #
Bidirectional pattern matching the first field of a record using :-> values and any functor.
This pattern is bidirectional meaning you can use it either as a pattern or a constructor, e.g.
let rec = Just 123 :^: Just "foo" :^: Nil
Just foo :^: Just bar :^: Nil = rec
Mnemonic: ^ for products (record) of products (functor).
pattern Val :: forall a s. a -> Identity ((:->) s a) Source #
Bidirectional pattern unwrapping Identity (s :-> a) to a.
newtype s :-> a :: Symbol -> * -> * #
A column's type includes a textual name and the data type of each element.
Instances
| Eq a => Eq ((:->) s a) | |
| Floating a => Floating ((:->) s a) | |
| Fractional a => Fractional ((:->) s a) | |
| Num a => Num ((:->) s a) | |
| Ord a => Ord ((:->) s a) | |
| Real a => Real ((:->) s a) | |
| RealFloat a => RealFloat ((:->) s a) | |
| RealFrac a => RealFrac ((:->) s a) | |
| (KnownSymbol s, Show a) => Show ((:->) s a) | |
| Monoid a => Monoid ((:->) s a) | |
| KnownSymbol s => NamedField ((:->) s a) Source # | |
| (MVector (VectorMFor a) a, Vector (VectorFor a) a, RecVec rs) => RecVec ((:) * ((:->) s a) rs) | |
| type Unwrapped ((:->) s a) # | |
rlens :: (Functor g, RElem (s :-> a) rs (RIndex (s :-> a) rs), Functor g) => proxy (s :-> a) -> (a -> g a) -> Rec Identity rs -> g (Rec Identity rs) Source #
Lens to a particular field of a record using the Identity functor.
For example, given:
type FFoo = "foo" :-> Int type FBar = "bar" :-> String fBar_ :: Proxy FBar fBar_ = Proxy rec ::RecIdentity'[FFoo, FBar] rec = 123 :*: "hello!" :*: Nil
Then:
view (rlens fBar_) rec == "hello!" set (rlens fBar_) "goodbye!" rec == 123 :*: "goodbye!" :*: Nil over (rlens fBar_) (map toUpper) rec == 123 :*: "HELLO!" :*: Nil
rlens' :: (Functor f, Functor g, RElem (s :-> a) rs (RIndex (s :-> a) rs), Functor g) => proxy (s :-> a) -> (f a -> g (f a)) -> Rec f rs -> g (Rec f rs) Source #
Lens to a particular field of a record using any functor.
For example, given:
type FFoo = "foo" :-> Int type FBar = "bar" :-> String fBar_ :: Proxy FBar fBar_ = Proxy rec ::RecMaybe'[FFoo, FBar] rec = Just 123 :^: Just "hello!" :^: Nil
Then:
view (rlens' fBar_) rec == Just "hello!" set (rlens' fBar_) Nothing rec == Just 123 :^: Nothing :^: Nil over (rlens' fBar_) (fmap (map toUpper)) rec == Just 123 :^: Just "HELLO!" :^: Nil