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