트랜스포메이션 없는 간단 리더 구현하기
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
해놓고 보니 결과는 간단한데 존나게 돌아와서 꽤 걸렸네........ ㅠ..........
하스켈에 쏟을 시간이 부족하다
ㅁ