Frames-map-reduce-0.1.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 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

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

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 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

foldAllConstrained :: forall c rs. (RPureConstrained (ConstrainedField c) rs, RPureConstrained KnownField rs, RApply rs, EndoFieldFoldsToRecordFolds 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