我是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 ...
Effect Unit
-它会以透明的方式执行效果并将其结果作为纯值返回。