- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图理解为什么以下内容在 Purescript 中不起作用。我感觉 Haskell 社区也可以回答这个问题,因此我将其交叉列出。
总体要点是:
如果我有一个 do
block ,我可以不添加一次性值吗?在本例中,我尝试在一系列单子(monad)计算中间记录一些内容(类似于 Haskell 的 print
)。
main = do
a <- someAction1
b <- someAction2
_ <- log "here is a statement I want printed"
someAction3 a b
具体来说,我有一个函数,它采用以下内容(来自 Halogen 示例模板项目)
data Query a = ToggleState a
eval :: Query ~> H.ComponentDSL State Query g
eval (Toggle next) = do
H.modify (\state -> state { isOn = not state.isOn })
_ <- log "updating the state!"
pure next
在我看来,这应该像 Haskell 中一样工作
barf :: IO Int
barf = do
_ <- print "Here I am!"
return 5
main :: IO ()
main = do
a <- barf
_ <- print $ "the value is: " ++ (show a)
print "done"
具体来说,我得到的错误是单子(monad)的类型不匹配
Could not match type
Eff
with typeFree
while trying to match typeEff ( "console" :: CONSOLE | t6 )
with typeFree (HalogenFP t0 { "isOn" :: t1 | t2 } t3 t4)
... etc...
我知道 purescript 让我声明“我在 monad 中接触的东西”(即 forall e.Eff ( a::SOMEVAR, b::SOMEOTHERVAR | eff ) 单元
,但我不知道在这种情况下该怎么做...
最佳答案
如果您使用的是 0.12.0 版的halogen,您应该能够使用 https://pursuit.purescript.org/packages/purescript-aff-free/3.0.0/docs/Control.Monad.Aff.Free#v:fromEff 中的 fromEff
像这样:
data Query a = ToggleState a
eval :: Query ~> H.ComponentDSL State Query g
eval (Toggle next) = do
H.modify (\state -> state { isOn = not state.isOn })
_ <- H.fromEff (log "updating the state!")
pure next
在即将推出的卤素版本 (>= 0.13) 中,这会变得更好,其中 liftEff
应该足够了。
为什么不能立即使用 log
的原因是 H.ComponentDSL
不是 Eff
的类型同义词,但对于 Free
来说,您不能简单地混合 Eff
和 ComponentDSL
操作。
关于haskell - 了解 Purescript Eff Monad 和 do block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41606126/
阅读 Eff-Language 时,我想知道是否有类似的想法已经在使用。 Eff-Language 提到了一篇名为“Inferring Algebraic Effects”的论文,它描述了 Eff 用
Purescript 类型之间有什么关系 Eff 和 Aff ?可以在它们之间转换吗? 我刚开始使用来自 Haskell 的 Purescript,似乎这两种类型都大致扮演了 IO 的角色。在 Has
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我正在使用 purescript-node-http 学习 Purescript图书馆。如果我有一个值,其类型如下: > :t f forall t3. Eff ( http :: HTT
我想尽可能地限制程序中函数的影响,以便例如如果我有一个应该查询数据库的函数,我知道它不会打印用于删除我的文件的内容。 作为一个具体示例,假设我有一个带有“用户”表的数据库。 有些函数只能读取该表,有些
Eff monad 看起来比 monad 转换器好得多,也更有用,并且可以用 monad 转换替换样板,但是 Free monad 可以通过提供之间的划分来实现完全相同的事情执行和程序定义,因此 Ef
我试图理解为什么以下内容在 Purescript 中不起作用。我感觉 Haskell 社区也可以回答这个问题,因此我将其交叉列出。 总体要点是: 如果我有一个 do block ,我可以不添加一次性值
我想做一些需要效果的编程(谁不需要:-)。 特别是像 scalaz Task 运行一些异步数据检索和 ruturn 类似 Future 的效果,它将在完成时处理结果。 我注意到类型级别的 Cats 现
我正在将 History.js 中的绑定(bind)编写到 PureScript 中,但仍在努力理解 Eff monad、一排效果是什么以及它们为何有值(value)。现在我用 EasyFFI 写了以
我正在使用 PureScript 制作 Canvas 游戏,我想知道处理事件监听器的最佳方法是什么,特别是在自定义 monad 堆栈中运行回调。这是我的游戏堆栈... type BaseEffect
在monad transformers , 我们有 instance (Monad m, Monoid e) => MonadPlus (ExceptT e m) 在extensible effect
我正在尝试通过套接字发送 29 位 EFF CAN 消息,但由于某种原因,它使用 11 位标识符发送消息,从 ID 中删除 5 个字节。使用环回模式,通过 candump 我可以看到消息以 11 位形
我是一名优秀的程序员,十分优秀!