相关疑难解决方法(0)

Haskell rec关键字如何工作?

在箭头符号中,您可以使用rec关键字来编写递归定义.例如:

rec
    name <- function -< input
    input <- otherFunction -< name
Run Code Online (Sandbox Code Playgroud)

这怎么能评估?它似乎只会进入一个无限循环或其他东西.我知道它评估循环箭头组合器,但我不明白它是如何工作的.

编辑:权力示例非常有用.但是你怎么用写符号来写呢?我假设你需要使用rec.

haskell arrows

24
推荐指数
2
解决办法
3625
查看次数

从箭头表示法转换

我仍然试图弄清楚箭头表示法和Haskell中定义的箭头类型类的语义之间的相似之处.特别是,这个问题似乎有一个用箭头符号写的小计数器的非常规范的例子:

counter :: ArrowCircuit a => a Bool Int
counter = proc reset -> do
        rec     output <- returnA -< if reset then 0 else next
                next <- delay 0 -< output+1
        returnA -< output
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我如何在没有箭头符号的情况下将其转换回Haskell2010吗?

haskell arrows frp netwire

6
推荐指数
1
解决办法
333
查看次数

与 Netwire 一起使用时对 ArrowLoop 的误解

在这篇文章中出色的答案的引导下,我试图获得一个ArrowLoop不使用箭头表示法的工作示例。在我完全理解箭头在幕后的工作原理之前,我对使用箭头表示法感到不舒服。话虽这么说,我已经构建了一个小程序,基于我对 Arrows 的(有限)理解应该可以工作。然而,它最终以可怕的异常终止<<loop>>

module Main where

import Control.Wire
import FRP.Netwire

farr :: SimpleWire (Int, Float) (String, Float)
farr = let
  fn :: Int -> Float -> ((String, Float), SimpleWire (Int, Float) (String, Float))
  fn i f = (("f+i: " ++ (show (fromIntegral i + f)), f + 0.1), loopFn)

  loopFn :: SimpleWire (Int, Float) (String, Float)
  loopFn = mkSFN $ \(i, f) -> fn i f
  in
   mkSFN $ \(i, _) -> fn i 0.0 …
Run Code Online (Sandbox Code Playgroud)

haskell arrows frp netwire

5
推荐指数
1
解决办法
311
查看次数

标签 统计

arrows ×3

haskell ×3

frp ×2

netwire ×2