代码之家  ›  专栏  ›  技术社区  ›  zython Hiery Nomus

如何打印函数内部的变量?

  •  0
  • zython Hiery Nomus  · 技术社区  · 7 年前

    我有一个功能:

    fold_wrap :: (a -> a -> a) -> (Prop -> a) -> a -> Wrapper -> a
    
    fold_wrap v x z (Mrappe l r)   = v ( v(v x z l) v(v x z r) )
    fold_wrap v x z (Wrap f)       = x f 
    fold_warp v x z (Wtail )       = z
    

    当我遇到以下错误时:

    mast: mast.hs:(15,1)-(16,31): Non-exhaustive patterns in function fold_mast
    

    所以我补充说

    fold_wrap v x z _ = z 
    

    修正了错误,但是

    这让我相信有些模式确实是无与伦比的。

    我的直觉是打印传递给函数的内容。

    所以我加了这个

    fold_wrap  v x z g = print g
    

    但这也不起作用,因为函数必须返回 a 类型与否 IO

    所以我的问题是:

    我怎么打印 g 同时返回一些虚拟值?

    关于如何修复这种非穷尽模式匹配的提示也会受到赞赏。

    1 回复  |  直到 7 年前
        1
  •  5
  •   Silvio Mayolo    7 年前

    Wrapper

    IO

    然而 Debug.Trace 它打破了所有的理智和正常的功能规则,让你做到这一点。

    import Debug.Trace
    
    fold_wrap v x z g = traceShow g someDummyValue
    

    包装 Show .我们对此无能为力;如果哈斯克尔不知道 如果要打印某个东西,那么它就不能打印它,即使是为了调试。第二,haskell不严格,所以当您运行代码时,需要确保 fold_wrap main .

    不要 当用于面向用户的代码时。更不用说它打破了书中的所有哈斯克尔法则。