gpt4 book ai didi

purescript - 解决效果和可能

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

spec = describe "Router" $ do

let sampleRoutes = [( Tuple "/" "views/index.yaml" ),
( Tuple "/foo" "views/foo.yaml" ),
( Tuple "/bar" "views/bar.yaml" )]

it "should default to the first of the list" $ do
r <- fst <$> head sampleRoutes
fprint r

上面抛出以下错误:

Error in declaration spec
Cannot unify Data.Maybe.Maybe with Control.Monad.Eff.Eff u4505.

我相信它,因为它期望第二个参数是 Eff 类型的,但是因为head 引入的 Maybe 的使用,第二个参数最终变成了 Maybe 类型。

it :: forall e a. String -> Eff e a -> Eff (it :: It | e) Unit

问题是,我不知道如何解决这个问题。我不能有一个 Maybe 而不是一个有效的代码块吗?

最佳答案

Maybe可用于 do block ,但 block 中的所有操作都必须是 Maybe a 类型对于一些 a .

Eff eff 也是如此- 您可以使用 Eff effdo ,但所有操作都必须是 Eff eff a 类型对于一些 a .

您不能在 do 中混合和匹配这两种效果。堵塞。

您似乎想使用 Maybe a 类型的值在 do 内monad 为 Eff eff 的 block .您有两种选择:

  • 使用 Data.Array.Unsafe.head这会给你一个未包装的Tuple ,您可以调用fst直接打开。
  • Maybe 上的模式匹配Eff 中决定行动方案的值(value)单子(monad):

    it "should default to the first of the list" $ do
    case head sampleRoutes of
    Nothing -> ... -- Handle empty array
    Just tuple -> fprint (fst tuple) -- Print the first component
    .. rest of do block ..

关于purescript - 解决效果和可能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24987024/

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