我想提出一个模块化的程序设计,我再次请求你的帮助.
作为以下帖子的后续Monad变形金刚与Haskell中的传递参数和大规模设计,我正在尝试构建两个独立模块,使用Monad变换器但暴露Monad不可知函数,然后结合Monad不可知函数来自每个这些模块成为一个新的Monad不可知功能.
我已经无法运行相结合的功能,例如我怎么打电话mainProgram使用runReaderT下面的例子?
附属问题是:是否有更好的方法来实现相同的模块化设计目标?
该示例有两个模拟模块(但编译),一个执行日志记录,另一个读取用户输入并对其进行操作.组合功能读取用户输入,记录并打印它.
{-# LANGUAGE FlexibleContexts #-}
module Stackoverflow2 where
import Control.Monad.Reader
----
---- From Log Module - Writes the passed message in the log
----
data LogConfig = LC { logFile :: FilePath }
doLog :: (MonadIO m, MonadReader LogConfig m) => String -> m ()
doLog _ = undefined
----
---- From UserProcessing Module - Reads the user Input and changes it to the configured case …Run Code Online (Sandbox Code Playgroud)