让我从我想要解决的任务开始,可能我走错路了。我在玩具项目中使用了 Snap 框架,主要是它在Snap
monad 下的功能。我需要在它上面添加我的状态。我使用单子变压器:
type SnapApp a = StateT AppState Snap a
这在模块中定义,例如Base
. 由于我在其他模块中需要它,因此我必须将其导出:
module Base
( ..
, SnapApp
) where
这很好,但我希望该模块不导出SnapApp
状态单子,因为我有一些复杂的处理来设置状态的一些属性。例如,会话。我必须在更改文件时写入文件,因此仅修改会话是错误的get
,put
应该调用特殊函数。所以,我隐藏了使用newtype
而不是数据导出contrustor:
newtype SnapApp a = SnapApp (StateT AppState Snap a)
我用修改会话等的功能使它成为我的类的实例。但是出现了问题:我丢失了Monad
类和其他新的实例SnapApp
。我坚持实施>>=
:
instance Monad SnapApp where
return = SnapApp . return
mx >>= fm = -- HOW?
谢谢!