{-| Copyright : (c) Hisaket VioletRed, 2022 License : AGPL-3.0-or-later Maintainer : hisaket@outlook.jp Stability : experimental -} module Polysemy.Env where import Polysemy ( Member, Sem, interpret, makeSem ) import Polysemy.Input ( Input (Input) ) -- | Variant of 'Input' effect that has no side effects. data Env i m a where Env :: Env i m i makeSem ''Env {- |Transforms an 'Input' effect into an `Env` effect. Note that "askToInput" of inverted version is not provided because an 'Env' effect is specialized version of an 'Input' effect. -} inputToEnv :: Member (Env i) r => Sem (Input i ': r) a -> Sem r a inputToEnv = interpret \Input -> env -- | Runs an 'Env' effect. runEnvConst :: i -> Sem (Env i ': r) a -> Sem r a runEnvConst i = interpret \Env -> pure i