小编kir*_*pon的帖子

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

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

我发现getQputQ在模块中Language.Haskell.TH.Syntax.这些函数处理template-haskell 2.10文档所示的Q monad中的状态.我试图使用这个API,但getQ无法获得状态.

以下代码是我的问题的一个例子.我希望x能够受到限制(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 …
Run Code Online (Sandbox Code Playgroud)

haskell ghc template-haskell

7
推荐指数
1
解决办法
268
查看次数

标签 统计

ghc ×1

haskell ×1

template-haskell ×1