相关疑难解决方法(0)

勺子在Haskell中不安全吗?

所以在Haskell中有一个名为spoon的库让我这样做

safeHead :: [a] -> Maybe a
safeHead = spoon . head
Run Code Online (Sandbox Code Playgroud)

但它也让我这样做

>>> spoon True             :: Maybe Bool
Just True
>>> spoon (error "fork")   :: Maybe Bool
Nothing
>>> spoon undefined        :: Maybe Bool
Nothing
>>> spoon (let x = x in x) :: Maybe Bool
<... let's just keep waiting...>
Run Code Online (Sandbox Code Playgroud)

这在某些情况下似乎非常有用,但它也违反了指称语义(据我的理解),因为它让我能够区分语义原型中的不同事物?.这比throw/ catch它更强大,因为它们可能具有由continuation定义的语义.

>>> try $ return (error "thimble") :: IO (Either SomeException Bool)
Right *** Exception: thimble
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:有人可以恶意使用勺子打破类型安全吗?便利值得危险吗?或者,更现实地说,有一种合理的方式使用它会侵蚀某人对某项计划意义的信心吗?

haskell

37
推荐指数
2
解决办法
1083
查看次数

标签 统计

haskell ×1