相关疑难解决方法(0)

类型推断会干扰参考透明度

Haskell语言在参考透明度方面提供的确切承诺/保证是什么?至少Haskell报告没有提到这个概念.

考虑表达式

(7^7^7`mod`5`mod`2)
Run Code Online (Sandbox Code Playgroud)

我想知道这个表达式是否为1.为了我的安全,我会做两次这样做:

( (7^7^7`mod`5`mod`2)==1, [False,True]!!(7^7^7`mod`5`mod`2) )
Run Code Online (Sandbox Code Playgroud)

现在给出(True,False)了GHCi 7.4.1.

显然,这个表达现在是参考不透明的.如何判断程序是否受此类行为影响?我可以全部淹没程序,::但这并不能使它具有可读性.我之间是否还有其他类的Haskell程序?这是一个完全注释和未注释的之间?

(除了我在SO上找到的唯一有点相关的问题之外,还有其他一些问题)

haskell referential-transparency adhoc-polymorphism

18
推荐指数
5
解决办法
1080
查看次数

导出类型构造函数是否有所作为?

假设我有一个内部数据类型,T a用于导出函数的签名:

module A (f, g) where

newtype T a = MkT  { unT :: (Int, a) } 
    deriving (Functor, Show, Read) -- for internal use

f :: a -> IO (T a)
f a = fmap (\i -> T (i, a)) randomIO

g :: T a -> a
g = snd . unT
Run Code Online (Sandbox Code Playgroud)

不导出类型构造函数有T什么影响?它是否会阻止消费者干涉类型的值T a?换句话说,出口清单(f, g)(f, g, T())这里有区别吗?

haskell

5
推荐指数
1
解决办法
386
查看次数

Haskell中的函数模式匹配

我正在尝试学习Haskell在学习你是一个Haskell的指导,但以下困惑我.

lucky :: (Integral a) => a -> String
lucky 7 = "LUCKY NUMBER SEVEN!"  
lucky x = "Sorry, you're out of luck, pal!"
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,那里有一行说明函数的确切类型.但这有必要吗?参数和返回值的类型不能从该行下面的模式中推导出来吗?

haskell

0
推荐指数
1
解决办法
166
查看次数