Skip to content

Instantly share code, notes, and snippets.

@joncol
Created November 30, 2021 07:10
Show Gist options
  • Save joncol/f8fc5b70084c44eed89537d84d4f3d9e to your computer and use it in GitHub Desktop.
Save joncol/f8fc5b70084c44eed89537d84d4f3d9e to your computer and use it in GitHub Desktop.
MonadReader example
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE NamedFieldPuns #-}
module Lib
( foo
, someFunc
) where
import Data.Text (Text)
import Control.Monad.Reader (runReader)
import Control.Monad.Reader.Class (MonadReader, ask)
newtype MyEnv = MyEnv { token :: Text }
foo :: MonadReader MyEnv m => m Int
foo = do
MyEnv { token } <- ask
pure $ case token of
"foo" -> 42
"bar" -> 123
_ -> (-1)
someFunc :: IO ()
someFunc = do
putStrLn "hello from `someFunc`"
let x = runReader foo (MyEnv "foo")
let y = runReader foo (MyEnv "bar")
let z = runReader foo (MyEnv "baz")
putStrLn $ "runReader foo (MyEnv \"foo\"): " <> show x
putStrLn $ "runReader foo (MyEnv \"bar\"): " <> show y
putStrLn $ "runReader foo (MyEnv \"baz\"): " <> show z
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment