gpt4 book ai didi

haskell - 可重置累加器行为?

转载 作者:行者123 更新时间:2023-12-02 18:09:12 26 4
gpt4 key购买 nike

我正在尝试了解 FRP,但不确定我做得是否正确。我想从按键事件构建一个字符串,直到按下 Enter 键为止。一旦按下回车键,字符串就会被写出,并且累加器将重置为空字符串。

我有一个事件源,每次按下键盘上的键ePressed时,它都会发出一个Char。首先,我将我关心的两种按键分开:

eWritable = filterE (`elem` ['A'..'z']) ePressed
eEnter = filterE (== '\n') ePressed

现在我知道如何将它们聚集在一起形成我想要发送的内容:

eToPrint = accumE "" (fmap (:) eWritable)

但我不知道如何“坚持”直到按下回车键,或者之后如何重置它。正确的、惯用的方法是什么?

最佳答案

这个想法是,eToPrint 是两个事件的联合:当您按下字符时和当您按下 Enter 时。这是一个示例(reactive-banana 0.8):

eToPrint = accumE "" $ unions [(:) <$> eWritable, const "" <$> eEnter]

要“保留”它,您可以使用行为

<小时/>

这是一个完整的解决方案:

bString = accumB "" $ unions [(:) <$> eWritable, const "" <$> eEnter]
eOut = bString <@ eEnter

行为bString包含累积的String值。每当发生 eEnter 事件时,eOut 事件都会返回最后一个字符串值。特别注意 accumB 的语义:在 eEnter 发生时,bString 的值仍然是 值。

关于haskell - 可重置累加器行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30627866/

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