Sad*_*tam 3 haskell undefined semantics
我是Haskell及其语义的新手.我了解到并非每个函数都可以映射到一个对象.例如:
square :: Int -> Int
square x = x*x
Run Code Online (Sandbox Code Playgroud)
square的值映射到math对象.但是,对于任何非终止函数,我们将其映射到特殊的数学值?.我想知道如果我必须用这个未定义的值进行计算会发生什么.例如,我有一组数字Z? ={?, 1,0,-1}.如果我乘以?1 会得到什么输出?因为,类型?将是未定义的,我能够与定义良好的类型进行乘法运算吗?因为,?在域中Z?,我想我可以做乘法.但是,它必须返回?!我想对此有一些指导!
乘法也将返回?.它的行为与你描述的完全一样; 依赖于该?值的任何计算也将产生?.
2 * undefined ~= undefined
Run Code Online (Sandbox Code Playgroud)
底值是每种类型的居民,因此是每个值集的隐式成员,不能被类型排除(除了使用GHC内部基元).存在这种特殊价值的原因是为了有可能争论Haskell中的Halting问题; 如果没有这个值,编译器必须能够证明某个计算终止以便进行类型检查,这通常是不可能的.