packages feed

freer-simple-1.0.0.0: examples/src/Capitalize.hs

module Capitalize
  ( Capitalize
  , capitalize
  , runCapitalize
  ) where

import Data.Char (toUpper)

import Control.Monad.Freer (Eff, Member, interpret, send)

data Capitalize v where
  Capitalize :: String -> Capitalize String

capitalize :: Member Capitalize r => String -> Eff r String
capitalize = send . Capitalize

runCapitalize :: Eff (Capitalize ': r) w -> Eff r w
runCapitalize = interpret $ \(Capitalize s) -> pure (map toUpper s)