Skip to content

Instantly share code, notes, and snippets.

@kylecorbelli
Last active February 6, 2024 06:08
Show Gist options
  • Save kylecorbelli/286a3b089aa65334bafc01bd0d15fac2 to your computer and use it in GitHub Desktop.
Save kylecorbelli/286a3b089aa65334bafc01bd0d15fac2 to your computer and use it in GitHub Desktop.
newtype Reader e a = Reader { runReader :: e -> a }
instance Functor (Reader a) where
fmap f (Reader g) = Reader $ f . g
instance Applicative (Reader a) where
pure x = Reader $ \_ -> x
m <*> n = Reader $ \e -> (runReader m e) (runReader n e)
instance Monad (Reader a) where
m >>= f = Reader $ \e -> runReader (f $ runReader m $ e) e
ask :: Reader a a
ask = Reader id
asks :: (e -> a) -> Reader e a
asks = Reader
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment