小编Ric*_*ruz的帖子

为什么使用模式匹配构造的函数具有Eq类型约束,但在使用数据构造函数时却没有?

为什么ghci 在我通过模式匹配构造的函数的类型签名中列出了一个相等类型约束matchInt:

$ ghci
GHCi, version 8.2.1: http://www.haskell.org/ghc/  :? for help
Prelude> :{
Prelude| matchInt 1 = 3
Prelude| matchInt _ = 4
Prelude| :}
Prelude> matchInt 1
3
Prelude> matchInt 22
4
Prelude> :t matchInt
matchInt :: (Eq a, Num a, Num p) => a -> p
Run Code Online (Sandbox Code Playgroud)

相反,当使用简单的数据构造函数时,没有相等类型约束.

$ ghci
GHCi, version 8.2.1: http://www.haskell.org/ghc/  :? for help
Prelude> data Z = Y Int
Prelude> :{
Prelude| matchDataInt (Y 1) = 3
Prelude| matchDataInt _ = …
Run Code Online (Sandbox Code Playgroud)

haskell equality typeclass ghci algebraic-data-types

7
推荐指数
2
解决办法
201
查看次数

为什么Haskell要求数字为printf消除歧义而不是show?

为什么printf "%d\n" 3暧昧而不是show 3?是否printf可以重写模块以提供自动消除歧义?据推测,show必须在较低层次上完成printf......或者是否存在一些重要的区别printf,show这需要消除数字的歧义?

如果printf 可以重写以自动处理数字而不明确消除歧义,那么正在show做什么?如何在show:: Int消除歧义的情况下将数字转换为字符串printf

这是show(没有消除歧义)的正确操作以及printf(消除歧义)的正确操作:

$ cat printStrLnShow3
import Text.Printf
main = putStrLn (show 3)
$ runghc printStrLnShow3
3
$ cat printfWithInt3
import Text.Printf
main = printf "%d\n" (3 :: Int)
$ runghc printfWithInt3
3
Run Code Online (Sandbox Code Playgroud)

这里是不明确的变量时,错误printf没有歧义的数量:

$ cat printfWithAmbiguous3
import Text.Printf
main = …
Run Code Online (Sandbox Code Playgroud)

printf haskell types hindley-milner type-signature

6
推荐指数
1
解决办法
158
查看次数

使用Xcode 8 Beta从命令行运行Swift 3

安装Xcode 8 beta后,我可以从命令行运行Swift 3吗?我看到/ usr/bin/swift仍然是5月5日的Swift 2.2.我希望看到像/ usr/bin/swift3这样的东西,但没有这样的运气.

swift.org下载说"Swift 3.0 Preview 1是Xcode 8.0 beta的一部分." 但我没有找到使用Xcode 8 beta运行命令行Swift 3的说明.

理想情况下,我想使用交互式REPL ...以及对Swift Package Manager代码进行命令行编译.

xcode command-line-interface xcode-tools swift3 xcode8

5
推荐指数
2
解决办法
1631
查看次数

为什么一个简单的Python/Haskell/etc程序在导入时冻结/挂起?

为什么这个Python程序会冻结/挂起:

$ ls -l freeze.py
-rwx------ 1 rick rick 24 Oct 27 11:40 freeze.py
$ cat freeze.py
import re
print "hello"
$ ./freeze.py
  C-c
Run Code Online (Sandbox Code Playgroud)

为什么这个Haskell程序也会冻结/挂起:

$ ls -l freeze.hs
-rwxrw-r-- 1 rick rick 46 Oct 27 11:22 freeze.hs
$ cat freeze.hs
import Text.Regex.Posix
main = print "hello"
$ ./freeze.hs
  C-c
Run Code Online (Sandbox Code Playgroud)

scripting haskell imagemagick sh python-import

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