packages feed

joint-0.1.1: Control/Joint/Base/Reader.hs

module Control.Joint.Base.Reader where

import Control.Joint.Composition (Composition (Primary, unwrap))
import Control.Joint.Transformer (Transformer (Schema, lay, wrap))
import Control.Joint.Schemes.TU (TU (TU))

newtype Reader r a = Reader (r -> a)

instance Composition (Reader e) where
	type Primary (Reader e) a = (->) e a
	unwrap (Reader x) = x

instance Transformer (Reader r) where
	type Schema (Reader r) u = TU ((->) r) u
	lay x = TU . const $ x
	wrap x = TU $ pure <$> unwrap x