트랜스포메이션 없는 간단 리더 구현하기


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


runReader :: Reader r a -> r -> a

runReader (Reader f) = f


ask :: Reader r r

ask = Reader id


instance Functor (Reader r) where

    fmap f x = Reader $ f . runReader x


instance Applicative (Reader r) where

    pure = Reader . const

    x <*> y = Reader $ runReader x <*> runReader y


instance Monad (Reader r) where

    return = pure

    x >>= y = Reader $ \r -> runReader ((y . runReader x) r) r


해놓고 보니 결과는 간단한데 존나게 돌아와서 꽤 걸렸네........ ㅠ..........
하스켈에 쏟을 시간이 부족하다