Safe Haskell | None |
---|---|
Language | Haskell2010 |
- type family Elem t ts :: Bool where ...
- type family Or (a :: Bool) (b :: Bool) :: Bool where ...
- type family Not a :: Bool where ...
- type family Disjoint ss ts :: Bool where ...
- type ElemOf ts r = RElem r ts (RIndex r ts)
- class RowToColumn ts rs where
- rowToColumn :: RowToColumn ts ts => Rec f ts -> [CoRec f ts]
- meltAux :: forall vs ss ts. (vs ⊆ ts, ss ⊆ ts, Disjoint ss ts ~ True, ts ≅ (vs ++ ss), ColumnHeaders vs, RowToColumn vs vs) => Record ts -> [Record (("value" :-> CoRec Identity vs) ': ss)]
- type family RDeleteAll ss ts where ...
- meltRow' :: forall proxy vs ts ss. (vs ⊆ ts, ss ⊆ ts, vs ~ RDeleteAll ss ts, Disjoint ss ts ~ True, ts ≅ (vs ++ ss), ColumnHeaders vs, RowToColumn vs vs) => proxy ss -> Record ts -> [Record (("value" :-> CoRec Identity vs) ': ss)]
- retroSnoc :: forall t ts. Record (t ': ts) -> Record (ts ++ '[t])
- meltRow :: (vs ⊆ ts, ss ⊆ ts, vs ~ RDeleteAll ss ts, Disjoint ss ts ~ True, ts ≅ (vs ++ ss), ColumnHeaders vs, RowToColumn vs vs) => proxy ss -> Record ts -> [Record (ss ++ '["value" :-> CoRec Identity vs])]
- class HasLength ts where
- melt :: forall vs ts ss proxy. (vs ⊆ ts, ss ⊆ ts, vs ~ RDeleteAll ss ts, HasLength vs, Disjoint ss ts ~ True, ts ≅ (vs ++ ss), ColumnHeaders vs, RowToColumn vs vs) => proxy ss -> FrameRec ts -> FrameRec (ss ++ '["value" :-> CoRec Identity vs])
Documentation
class RowToColumn ts rs where Source #
RowToColumn ts ([] *) Source # | |
((∈) * r ts, RowToColumn ts rs) => RowToColumn ts ((:) * r rs) Source # | |
rowToColumn :: RowToColumn ts ts => Rec f ts -> [CoRec f ts] Source #
Transform a record into a list of its fields, retaining proof that each field is part of the whole.
meltAux :: forall vs ss ts. (vs ⊆ ts, ss ⊆ ts, Disjoint ss ts ~ True, ts ≅ (vs ++ ss), ColumnHeaders vs, RowToColumn vs vs) => Record ts -> [Record (("value" :-> CoRec Identity vs) ': ss)] Source #
type family RDeleteAll ss ts where ... Source #
RDeleteAll '[] ts = ts | |
RDeleteAll (s ': ss) ts = RDeleteAll ss (RDelete s ts) |
meltRow' :: forall proxy vs ts ss. (vs ⊆ ts, ss ⊆ ts, vs ~ RDeleteAll ss ts, Disjoint ss ts ~ True, ts ≅ (vs ++ ss), ColumnHeaders vs, RowToColumn vs vs) => proxy ss -> Record ts -> [Record (("value" :-> CoRec Identity vs) ': ss)] Source #
This is melt
, but the variables are at the front of the record,
which reads a bit odd.
retroSnoc :: forall t ts. Record (t ': ts) -> Record (ts ++ '[t]) Source #
Turn a cons into a snoc after the fact.
meltRow :: (vs ⊆ ts, ss ⊆ ts, vs ~ RDeleteAll ss ts, Disjoint ss ts ~ True, ts ≅ (vs ++ ss), ColumnHeaders vs, RowToColumn vs vs) => proxy ss -> Record ts -> [Record (ss ++ '["value" :-> CoRec Identity vs])] Source #
Like melt
in the reshape2
package for the R
language. It
stacks multiple columns into a single column over multiple
rows. Takes a specification of the id columns that remain
unchanged. The remaining columns will be stacked.
Suppose we have a record, r :: Record [Name,Age,Weight]
. If we
apply melt [pr1|Name|] r
, we get two values with type Record
[Name, "value" :-> CoRec Identity [Age,Weight]]
. The first will
contain Age
in the value
column, and the second will contain
Weight
in the value
column.