【问题标题】:simple putStrLn in Haskell/Yampa with arrows syntax带有箭头语法的 Haskell/Yampa 中的简单 putStrLn
【发布时间】:2011-02-26 05:19:05
【问题描述】:

我将 Haskell 与使用箭头语言扩展的 Yampa FRP 库一起使用。

如何在 SF 中做一个简单的 putStrLn?

mySF = proc x -> do
    y <- identity -< x*x
    putStrLn "Hello World!" ++ show y
    returnA -< y

箭头语法抱怨表达式不在箭头中(当然),但即使有箭头我也没有输出

 output <- identity -< putStrLn "Hello World!"

【问题讨论】:

标签: haskell arrows frp


【解决方案1】:

在尝试阅读 FRP 论文时,我只玩过 Yampa 一点,但据我了解,这根本不是您在 Yampa 中使用 IO 的方式。相反,您可以使用 reactimate 函数“动画化”SF a b,该函数将 b -&gt; IO () 类型的函数作为其第二个参数。这个函数是像你的 putStrLn 这样的东西所在的地方,以及程序所做的任何其他类型的渲染。

"Yampa Arcade" 论文的“动画信号函数”部分很好地解释了 reactimate 的工作原理。

【讨论】:

  • 所以我必须收集所有消息并将它们打印在“actuate :: ... IO()”中?没有其他方法可以创建输出/调试消息吗?这听起来很难调试...
  • @sisif:如果您只想要老式的“printf 调试”,那就是Debug.Trace 的用途。对于“真实”输出,FRP 库的整个想法是将随时间变化的交互逻辑与 IO 副作用分开。
【解决方案2】:

这是一个完整的 Yampa 的 Hello World 示例。

{-# 语言箭头 #-}

进口玻璃钢.Yampa

main = 重新初始化输入输出过程
初始化 = 返回“Hello World!”
输入 _ = 返回(0.0,无)
输出 _ x = putStrLn x >> 返回 True
进程 = 身份

【讨论】:

    猜你喜欢
    • 2017-10-14
    • 2018-01-08
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    相关资源
    最近更新 更多