gpt4 book ai didi

frege - 什么是相当于 Haskell 的 "interact"函数的 Frege?

转载 作者:行者123 更新时间:2023-12-04 04:41:58 26 4
gpt4 key购买 nike

我尝试从在 Frege 中运行的真实 Haskell 中获取字数示例:

main _ = interact wordCount
where wordCount input = show (length (lines input)) ++ "\n"

但我明白了
can't resolve `interact`

有没有弗雷格惯用的方法来做到这一点?

最佳答案

它不在标准库中,但您可以定义如下内容:

import Data.List(intercalate)

interact :: (String -> String) -> IO ()
interact f = stdin.getLines >>= println . f . intercalate "\n"

更新 (对于 Groovy 的 eachLine 的评论):

弗雷格有 try , catch , finallyBufferedReader.getLine我们可以用它来创建这样一个函数:
eachLine :: Reader -> (String -> IO ()) -> IO ()
eachLine reader f = BufferedReader.new reader >>= go where
go breader = forever (breader.getLine >>= f)
`catch` (\(e :: EOFException) -> return ())
`finally` breader.close
try , catchfinally是具有以下类型的函数:
try :: (Applicative γ,Bind γ) => (α->γ β) -> α -> γ β
catch :: Exceptional β => ST γ α -> (β->ST γ α) -> ST γ α
finally :: IO α -> IO β -> IO α

我们可以使用 catchfinally没有 try正如我们在 eachLine 中所做的那样以上。请看这个 note来自 Frege 源的时间 try是必要的。

关于frege - 什么是相当于 Haskell 的 "interact"函数的 Frege?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18759291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com