此刻我已经覆盖了读者monad,而且我遇到了runReader
:
newtype Reader e a = Reader {runReader :: (e -> a)}
我知道数据构造函数Reader
在这里将两种不同类型(e
和a
)传递到使用记录语法的类型构造函数Reader
中包含在runReader ::
和e
上运行的函数a
。
我正在尝试对此进行测试:
newtype Test a b = Test {runTest :: (a -> b)}
如何创建runTest
的实施?
答案 0 :(得分:2)
如果
t :: Test a b
然后
的类型是什么runTest t :: ?
嗯,是的,runTest t :: a -> b
。它实际上与a
到b
的函数相同。同样,Reader e a
实际上是一个以e
作为其第一个参数的函数。
你问过实现,我假设你的意思是如何实现Reader Monad? Reader的monad实现允许您组合多个函数,这些函数都具有e
作为其第一个参数,并处理将单个e
分发给所有这些第一个输入。提供的e
将是您的函数(runReader r) :: e -> a
我不确定我是否在这里偏离轨道,让我知道,我会把读者monad充实一点。