deepcontrol-0.3.2.0: Provide more deeper level style of programming than the usual Control.xxx modules express

CopyrightConor McBride and Ross Paterson 2005, (C) 2015 KONISHI Yohsuke
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 equivalent 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

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

Do fmap f then commute, equivalent for traverse.

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

The auguments-flipped function for cmap, equivalent 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.