作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我以前写过一个似乎可以工作的函数,但不幸的是我没有很好地编写代码,现在必须再次弄清楚[我正在修改我正在使用的 monad 转换器堆栈]。
run_astvn ::
LowerMonadT (StateT LowerSketchData Identity) β
-> Seq SketchAST
run_astvn x = get_ast2 $ runIdentity $
runStateT (runStateT (runStateT x empty) empty)
(LowerSketchData Set.empty)
where get_ast2 = snd . fst
get_ast2
的具体类型.我似乎可以添加标志
-ddump-simpl
并通过我的终端输出 grep 直到我找到,(清理了一点)
(((β, Seq SketchAST), Seq SketchAST), LowerSketchData) -> Seq SketchAST
snd . fst
的类型不是 :)。
最佳答案
目前我知道有两种方法可以做到这一点,它们都是黑客。第一种是使用隐式参数:
{-# LANGUAGE ImplicitParams #-}
import Control.Monad.State
import Control.Monad.Identity
import Data.Sequence
import qualified Data.Set as Set
data LowerSketchData = LowerSketchData (Set.Set Int)
type LowerMonadT m = StateT (Seq SketchAST) (StateT (Seq SketchAST) m)
data SketchAST = SketchAST
--run_astvn ::
-- LowerMonadT (StateT LowerSketchData Identity) β
-- -> Seq SketchAST
run_astvn x = ?get_ast2 $ runIdentity $
runStateT (runStateT (runStateT x empty) empty)
(LowerSketchData Set.empty)
-- where get_ast2 = snd . fst
*Main> :t run_astvn
run_astvn
:: (?get_ast2::(((a, Seq a1), Seq a2), LowerSketchData) -> t) =>
StateT
(Seq a1) (StateT (Seq a2) (StateT LowerSketchData Identity)) a
-> t
import Control.Monad.State
import Control.Monad.Identity
import Data.Sequence
import qualified Data.Set as Set
data LowerSketchData = LowerSketchData (Set.Set Int)
type LowerMonadT m = StateT (Seq SketchAST) (StateT (Seq SketchAST) m)
data SketchAST = SketchAST
run_astvn ::
LowerMonadT (StateT LowerSketchData Identity) β
-> Seq SketchAST
run_astvn x = get_ast2 $ runIdentity $
runStateT (runStateT (runStateT x empty) empty)
(LowerSketchData Set.empty)
-- where get_ast2 = snd . fst
where get_ast2 :: (); get_ast2 = undefined
test.hs:13:19:
The first argument of ($) takes one argument,
but its type `()' has none
In the expression:
<snip>
() -> ()
:
test.hs:13:30:
Couldn't match expected type `()'
with actual type `(((β, Seq SketchAST), Seq SketchAST),
LowerSketchData)'
In the second argument of `($)', namely
<snip>
(((β, Seq SketchAST), Seq SketchAST), LowerSketchData) -> ()
.最后一次迭代摆脱了最后的
()
,因为编译器提示:
test.hs:13:19:
Couldn't match expected type `Seq SketchAST' with actual type `()'
In the expression:
<snip>
()
应该是
Seq SketchAST
.
关于debugging - haskell -- -ddump-simpl 是获得具体类型的最佳方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7989052/
我是 stack 的忠实粉丝,我已经从我的机器上完全删除了任何独立的 cabal 和 ghc 可执行文件(让 stack 在它自己神秘的 ~/.stack/目录中安装它需要的任何东西)...... 但
我以前写过一个似乎可以工作的函数,但不幸的是我没有很好地编写代码,现在必须再次弄清楚[我正在修改我正在使用的 monad 转换器堆栈]。 run_astvn :: LowerMonadT (S
我正在关注 Yesod 的书,其中指出: But by using the -ddump-splices GHC option, we can get an immediate look at the
我正在使用堆栈解释器功能并拥有如下代码: #!/usr/bin/env stack {- stack --resolver lts-9.0 --install-ghc r
我编写了一个小实用程序来扩展 Haskell 模块中的所有 TH 拼接,这样即使 TH 不可用,我也可以使用 haskell 模块。为此,我通过 -ddump-splices在编译模块并捕获生成的代码
我是一名优秀的程序员,十分优秀!