atl-15321.1: Control/Arrow/Writer/Class.hs
{-# LANGUAGE FunctionalDependencies #-}
module Control.Arrow.Writer.Class where
import Prelude hiding ((.), id);
import Control.Arrow;
import Control.Category;
class Arrow r => ArrowWriter w r | r -> w where {
tell :: r w ();
look :: r a (a, w);
censor :: (w -> w) -> r a b -> r a b;
};
looksA :: ArrowWriter w r => r w b -> r a (a, b);
looksA x = look >>> id *** x;
looks :: ArrowWriter w r => (w -> b) -> r a (a, b);
looks = looksA . arr;