prairie-0.0.4.0: A first class record field library
Safe HaskellSafe-Inferred
LanguageHaskell2010

Prairie.Fold

Description

This module shows you how to fold a Record.

These utilities are based on recordToFieldList, which converts a Record into a SomeFieldWithValue. Then, foldRecord unpacks that GADT for you, which allows you to know the type of the field and combine them.

Since: 0.0.3.0

Synopsis

Documentation

data SomeFieldWithValue rec where Source #

A datatype containing a Field along with a value for that field.

Since: 0.0.3.0

Constructors

SomeFieldWithValue :: Field rec a -> a -> SomeFieldWithValue rec 

recordToFieldList :: forall rec. Record rec => rec -> [SomeFieldWithValue rec] Source #

Convert a Record into a list of the records fields paired with the value for that record.

Since: 0.0.3.0

foldRecord :: forall rec r. Record rec => (forall ty. ty -> r -> Field rec ty -> r) -> r -> rec -> r Source #

Fold over the fields of a record to produce a final result.

The function parameter accepts the Field rec ty, a value in the record, and the accumulator. Example:

foldRecord
     (\ val acc field ->
         case field of
             UserName ->
                 length val + acc
             UserAge ->
                 val + acc
     )
     0
     User { userName = "Matt", userAge = 35 }

The paramater list is given to enable LambdaCase nicety:

foldRecord
     (\val acc -> \case
         UserName ->
             length val + acc
         UserAge ->
             val + acc
     )

Since: 0.0.3.0

foldMRecord :: forall rec m r. (Record rec, Monad m) => (forall ty. ty -> r -> Field rec ty -> m r) -> r -> rec -> m r Source #

Fold over a Record with a monadic action.

Since: 0.0.3.0

foldMapRecord :: forall rec m. (Record rec, Monoid m) => (forall ty. ty -> Field rec ty -> m) -> rec -> m Source #

Convert each field of a Record into a monoidal value and combine them together using mappend.

Since: 0.0.3.0