deepcontrol-0.1.0.0: Enable deeper level style of programming than the usual control provides

CopyrightKONISHI Yohuske 2015, Conor McBride and Ross Paterson 2005
LicenseBSD-style (see the LICENSE file in the distribution)
Maintainerocean0yohsuke@gmail.com
Stabilityexperimental
Portability---
Safe HaskellSafe
LanguageHaskell2010

DeepControl.Commutative

Contents

Description

This module is made of Traversable, distilling most function names polluted with action kind of concepts into crystalized(static) ones. Another reason I put this module is for the case if GHC would parse ((->) r) as a data constructor someday.

Synopsis

The Commutative class

class Functor c => Commutative c where Source

Methods

commute :: Applicative f => c (f a) -> f (c a) Source

This method is the same for sequenceA just except the name. The only difference is the name "commute", that is to say from which no action kind of concepts smell.

Utility functions

commuteMap :: (Applicative f, Commutative c) => (a -> f b) -> c a -> f (c b) Source

Do fmap f then commute, the same for traverse.

commuteFor :: (Applicative f, Commutative c) => c a -> (a -> f b) -> f (c b) Source

The auguments-flipped function for commuteMap, the same for for.

General definitions for superclass methods

fmapDefault :: Commutative t => (a -> b) -> t a -> t b Source

This function may be used as a value for fmap in a Functor instance, provided that commute is defined. (Using fmapDefault with a Commutative instance will result in infinite recursion.)

foldMapDefault :: (Commutative t, Monoid m) => (a -> m) -> t a -> m Source

This function may be used as a value for foldMap in a Foldable instance.