proton-0.0.4: src/Data/Profunctor/Reader/Class.hs
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE TypeFamilies #-}
module Data.Profunctor.Reader.Class where
import Data.Profunctor
class (Profunctor p) => ProfunctorReader r p | p -> r where
{-# MINIMAL (ask | reader), local #-}
ask :: p a (a, r)
ask = reader (flip (,))
reader :: (r -> a -> b) -> p a b
reader f = rmap (uncurry (flip f)) ask
local :: (r -> r) -> p a b -> p a b
class (Profunctor p) => ProfunctorReader' r p | p -> r where
{-# MINIMAL ask', local' #-}
ask' :: p (a, r) b -> p a b
local' :: (r -> r) -> p a b -> p a b