gpt4 book ai didi

haskell - 如何在模板haskell中使用getQ和putQ?

转载 作者:行者123 更新时间:2023-12-04 12:53:19 25 4
gpt4 key购买 nike

我想用 Template Haskell 处理 Q monad 中的状态。
根据一些堆栈溢出的答案,有一个使用 unsafePerformIO 的解决方案,但我想尽可能避免使用它。

我找到了getQputQ在模块 Language.Haskell.TH.Syntax .这些函数处理模板-haskell 2.10 文档所示的 Q monad 中的状态。
我尝试使用此 API,但 getQ无法获得状态。

以下代码是我的问题的一个示例。
我期待 x绑定(bind)到 (Just B) ,但是 x总是 Nothing .

-- X.hs
{-# LANGUAGE DeriveDataTypeable #-}
module X where
import Data.Typeable
data T = A | B | C deriving (Typeable,Show)


-- Y.hs
{-# LANGUAGE TemplateHaskell #-}
module Y where
import X
import Language.Haskell.TH
import Language.Haskell.TH.Syntax
-- splice for testing getQ and putQ
do
putQ B
x <- getQ :: Q (Maybe T)
runIO $ print x -- prints Nothing
return []

结果,我得到了以下编译消息。
$ ghc -fforce-recomp Y.hs
[1 of 2] Compiling X ( X.hs, X.o )
[2 of 2] Compiling Y ( Y.hs, Y.o )
Nothing

使用方法 getQputQ ?

最佳答案

getQ 目前有一个错误:它最近已修复,应该可以在下一版本的 GHC 中工作。

关于haskell - 如何在模板haskell中使用getQ和putQ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31143506/

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