Frames-map-reduce-0.4.0.0: Frames wrapper for map-reduce-folds and some extra folds helpers.

Copyright(c) Adam Conner-Sax 2019
LicenseBSD
Maintaineradam_conner_sax@yahoo.com
Stabilityexperimental
Safe HaskellNone
LanguageHaskell2010

Frames.Folds

Contents

Description

Frames.Folds contains various helper functions designed to simplify folding over Frames/Vinyl records given some way of folding over each column.

Synopsis

Types

type EndoFold a = Fold a a Source #

A Type synonym for folds like sum or, often, average.

Types to act as "interpretation functors" for records of folds

newtype FoldEndo t Source #

Wrapper for Endo-folds of the field types of ElFields

Constructors

FoldEndo 

Fields

newtype FoldFieldEndo f a Source #

Wrapper for endo-folds on an interpretation f. Usually f ~ ElField

Constructors

FoldFieldEndo 

Fields

newtype FoldRecord f rs a Source #

Wrapper for folds from a record to an interpreted field. Usually f ~ ElField

Constructors

FoldRecord 

Fields

functions for building records of folds

toFoldRecord :: KnownField t => Fold (Record rs) (Snd t) -> FoldRecord ElField rs t Source #

Create a FoldRecord from a Fold from a record to a specific type. This is helpful when creating folds from a record to another record (or the same record) by building it one field at a time. See examples for details.

recFieldF Source #

Arguments

:: KnownField t 
=> Fold a (Snd t)

A fold from some type a to the field type of an ElField

-> (Record rs -> a)

a function to get the a value from the input record

-> FoldRecord ElField rs t

the resulting FoldRecord-wrapped fold

Helper for building a FoldRecord from a given fold and function of the record

fieldToFieldFold Source #

Arguments

:: (KnownField x, KnownField y, ElemOf rs x) 
=> Fold (Snd x) (Snd y)

the fold to be wrapped

-> FoldRecord ElField rs y

the wrapped fold

special case of recFieldF for the case when the function from the record to the folded type is just retrieving the value in a field.

functions for turning records of folds into folds of records

sequenceRecFold :: forall as rs. Rec (FoldRecord ElField as) rs -> Fold (Record as) (Record rs) Source #

Turn a Record of folds into a fold over records

sequenceEndoFolds :: forall rs. (RApply rs, RPureConstrained KnownField rs, EndoFieldFoldsToRecordFolds rs) => Rec FoldEndo rs -> Fold (Record rs) (Record rs) Source #

turn a record of endo-folds over each field, into a fold over records

functions/types using constraints to extend an endo-fold across a record

foldAll :: (RPureConstrained KnownField rs, RApply rs, EndoFieldFoldsToRecordFolds rs) => (forall a. Fold a a) -> Fold (Record rs) (Record rs) Source #

apply an unconstrained endo-fold, e.g., a fold which takes the last item in a container, to every field in a record

type ConstrainedFoldable c rs = (RPureConstrained (ConstrainedField c) rs, RPureConstrained KnownField rs, RApply rs, EndoFieldFoldsToRecordFolds rs) Source #

foldAllConstrained :: forall c rs. ConstrainedFoldable c rs => (forall a. c a => Fold a a) -> Fold (Record rs) (Record rs) Source #

Apply a constrained endo-fold to all fields of a record. May require a use of TypeApplications, e.g., foldAllConstrained @Num FL.sum

foldAllMonoid :: forall f rs. (RPureConstrained (ConstrainedField (MonoidalField f)) rs, RPureConstrained KnownField rs, RApply rs, EndoFieldFoldsToRecordFolds rs) => Fold (Record rs) (Record rs) Source #

Given a monoid-wrapper, e.g., Sum, apply the derived endo-fold to all fields of a record This is strictly less powerful than foldAllConstrained but might be simpler to use in some cases

for generalizing

monoidWrapperToFold :: forall f a. (Newtype (f a) a, Monoid (f a)) => Fold a a Source #

Given a monoid-wrapper, e.g., Sum, and functions to wrap and unwrap, we can produce an endo-fold on a

class (Newtype (f a) a, Monoid (f a)) => MonoidalField f a Source #

Instances
(Newtype (f a) a, Monoid (f a)) => MonoidalField f a Source # 
Instance details

Defined in Frames.Folds