Haskell/Yampa 中带有箭头语法的简单 putStrLn

发布于 2024-09-03 20:23:45 字数 346 浏览 4 评论 0原文

我正在使用 Haskell 和 Yampa FRP 库,该库使用 arrows 语言扩展。

我怎样才能在 SF 中做一个简单的 putStrLn ?

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

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

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

i'm using Haskell with the Yampa FRP library which uses the arrows language extension.

how can i do a simple putStrLn in a SF?

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

the arrow syntax complains about the expression not bein an arrow (of course), but even with arrows i get no output

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

魔法少女 2024-09-10 20:23:45

我只是在尝试完成 FRP 论文时才尝试了一下 Yampa,但据我了解,这根本不是在 Yampa 中使用 IO 的方式。相反,您可以使用 reactimate 函数“动画”一个 SF a b,该函数采用 b ->; 类型的函数。 IO() 作为它的第二个参数。此函数是诸如 putStrLn 之类的内容以及程序执行的任何其他类型渲染的所在。

“Yampa Arcade” 论文很好地解释了 reactimate 的工作原理。

I've only played around with Yampa a bit while trying to work through the FRP papers, but in my understanding this just isn't at all how you work with IO in Yampa. Instead you "animate" an SF a b with the reactimate function, which takes a function of type b -> IO () as its second argument. This function is where things like your putStrLn would live, along with any other kinds of rendering the program does.

The "Animating Signal Functions" section of the "Yampa Arcade" paper gives a good explanation of how reactimate works.

○愚か者の日 2024-09-10 20:23:45

这是 Yampa 的完整 Hello World 示例。

{-# LANGUAGE Arrows #-}

import FRP.Yampa

main = reactimate initialize input output process
initialize  = return "Hello World!"
input _     = return (0.0, Nothing)
output _ x  = putStrLn x >> return True
process     = identity

Here is a full Hello World example for Yampa.

{-# LANGUAGE Arrows #-}

import FRP.Yampa

main = reactimate initialize input output process
initialize  = return "Hello World!"
input _     = return (0.0, Nothing)
output _ x  = putStrLn x >> return True
process     = identity
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文