相关疑难解决方法(0)

为什么Haskell异常只能在IO monad中捕获?

任何人都可以解释为什么异常可能会被抛出IO monad,但可能只会被捕获到它内部?

io monads haskell exception-handling

27
推荐指数
2
解决办法
2030
查看次数

幂等元和确定性函数之间有什么区别?

它们(幂等函数和确定性函数)只是在给定相同输入的情况下返回相同结果的函数吗?

或者是否有我失踪的区别?(如果有区别,请你帮我理解它是什么)

deterministic idempotent

12
推荐指数
3
解决办法
2833
查看次数

强大的haskell没有错误

我正在学习Haskell.我选择这种语言的动机之一是编写具有高度鲁棒性的软件,即完全定义的函数,数学上确定的函数,永不崩溃或产生错误.我并不是指由系统的谓词("系统内存不足","计算机着火"等)引起的故障,这些都不是很有趣,并且可能只是使整个过程崩溃.我也不是指由无效声明(pi = 4)引起的错误行为.

相反,我指的是错误状态导致的错误,我希望通过严格的静态类型使这些状态不可表示和不可编译(在某些函数中)来删除.在我看来,我把这些功能称为"纯粹",并认为强类型系统可以让我实现这一目标.但是,Haskell并没有以这种方式定义"纯",并允许程序error在任何上下文中崩溃.

为什么捕获异常非纯,但抛出异常是纯粹的?

这是完全可以接受的,并不奇怪.然而,令人失望的是,Haskell似乎没有提供某些功能来禁止可能导致分支使用的函数定义error.

这是一个人为的例子,为什么我觉得这令人失望:

module Main where
import Data.Maybe

data Fruit = Apple | Banana | Orange Int | Peach
    deriving(Show)

readFruit :: String -> Maybe Fruit
readFruit x =
    case x of
         "apple" -> Just Apple
         "banana" -> Just Banana
         "orange" -> Just (Orange 4)
         "peach" -> Just Peach
         _ -> Nothing

showFruit :: Fruit -> String
showFruit Apple = "An apple"
showFruit Banana = "A Banana"
showFruit (Orange x) …
Run Code Online (Sandbox Code Playgroud)

haskell robustness

8
推荐指数
1
解决办法
316
查看次数

在Haskell中避免使用部分函数比其他语言更容易吗?

我们被要求避免使用Haskell中比其他语言更加强调的部分功能.

这是因为部分函数在Haskell中比其他语言更常见(参见这个问题),还是在其他语言中避免使用它们是不切实际的?

haskell

4
推荐指数
2
解决办法
194
查看次数