gpt4 book ai didi

haskell - 如果我显然想访问隐藏的数据构造函数,有哪些可用的解决方案?

转载 作者:行者123 更新时间:2023-12-04 22:05:26 24 4
gpt4 key购买 nike

我正在使用一个在方便的 ReaderT monad 中携带东西的包。它们的 runReaderT/unwrapping 函数位于隐藏模块中。我希望能够在任意环境中任意/手动打开它。所以我对手动操作没有任何疑虑——但是,环境类型有一个隐藏的数据构造函数,所以我无法生成一个使用 runReaderT 进行类型检查的环境。

有什么办法可以解决这个问题吗?还是我应该放弃这个不可能并尝试重组我的程序?我计划将此项目部署到具有自动构建系统的远程系统,因此我不确定是否要直接编辑包的源代码/ fork 它。

具体来说,我使用的是 scotty ,我正在尝试模仿 runActionM 来自 Web.Scotty.Action模块。我试图模拟页面请求并捕获结果,并模拟通常具有 IO 副作用的页面请求。

具体例子:

-- LibraryPackage.hs
module LibraryPackage (SpecialReader) where

import Control.Monad.Reader

type SpecialReader a = Reader Env a
data Env = Env Int

runSpecialReader r = runReader r (Env 5)


-- Main.hs
import LibraryPackage

main = do
let
r = return 10 :: SpecialReader Int

-- problem here -- cannot construct an `Env`
print $ runReader r (Env 5)

最佳答案

你很好,真的被困住了。这是选项

  • 与包维护者交谈,看看是否有其他解决方案
  • 使用undefined如果您实际上不需要有意义的值
  • 不要使用此版本的库(在 非常 极端情况下剪切和粘贴或 fork )
  • 如果这只是一次性的,您可以牺牲一只山羊并尝试unsafeCoerce

  • Haskell 不允许你做一些事情,比如创建你不应该做的类型。想象一下,如果您可以在 IO 上进行模式匹配,会有什么原因?例如。

    关于haskell - 如果我显然想访问隐藏的数据构造函数,有哪些可用的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18724956/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com