PureScript相当于Haskell前奏中的“错误”

问题描述 投票:1回答:1

我是PureScript的新手,正在尝试寻找“断言失败”的成语。在以下情况下,我通常使用它来停止执行:

  • 我需要依赖的不变式已损坏
  • 代码的一个分支无法访问
  • 我想推迟一个表达式的实现,但希望它在运行时“快速失败”(而不只是屈服undefined
  • 在Haskell中,我通常将前奏函数error用于此类情况。在PureScript中,我(天真)希望能够通过抛出异常并(不安全地)丢弃效果类型来模拟error,如下所示:

error

但是这行不通:如果我将对module Test.Test where import Prelude import Effect (Effect) import Effect.Exception (throw) import Unsafe.Coerce (unsafeCoerce) main :: Effect Unit main = do _ <- pure $ error "Doesn't fail" error' "Fails" error :: ∀ a . String -> a error = unsafeCoerce <<< throw error' :: ∀ a . String -> Effect a error' = throw 的调用嵌入到一个大型程序中,那么我最终得到的运行时对象的字段为error(从JavaScript的角度来看),而不是一个程序突然终止为一旦执行undefined。函数error似乎可以满足我的要求,但对于上述用例来说,使用throw类型污染程序似乎不合适。

我不反对PureScript的行为-我无法将有效的计算强制转换为纯计算并仍然观察其效果,这似乎是合理的。所以我想我错过了一个窍门(或者我还没有找到的库函数)。我要寻找的PureScript惯用语是什么?

((测试库Effect提供purescript-assert功能,但它也具有类型assert。]

我是PureScript的新手,正在尝试寻找“断言失败”的成语。在以下情况下,我通常使用这种方式来停止执行:我需要依赖的不变式已损坏,代码的分支无法访问I ...

assertion purescript side-effects
1个回答
3
投票
您需要的是Effect Unit-它会以透明的方式执行效果并将其结果作为纯值返回。
© www.soinside.com 2019 - 2024. All rights reserved.