为什么学了 Haskell,果然印证了 V2EX 上的 智者(忘记网名)的断论,“学了 Haskell,回不去了“, 回不去了耶。

2016-02-28 21:12:46 +08:00
 myid
7439 次点击
所在节点    Haskell
22 条回复
shyling
2016-02-28 21:29:36 +08:00
我一直都有点疑问
func :: a -> [a]
func x = yyy

这样写真的好看么...吹嘘的是类型系统,还要手动指明类型
levn
2016-02-28 21:35:53 +08:00
学到 Monad Transformer 之类的话。。还会这么想么 。。
jiyinyiyong
2016-02-28 21:44:24 +08:00
@shyling 不是为了好看了.

Haskell 研究的类型系统是希望能帮助程序员把类型自动推导出来, 一般的都能推导出来, 然而在使用类型类(...没记清楚, 没学好)的情况下无法推导需要手写. 结果真实的场景下很多人都自己写... 其实 Haskell 吹嘘的不是可推导, 而是代数类型系统验证通过以后可靠性更好. 据说以后的 Dependent Type 实现后还更严格.
jiyinyiyong
2016-02-28 21:47:47 +08:00
表示自从被不可变数据洗脑我已经受不了 JavaScript 那种坑人的 mutable data structure.
然而类型系统太复杂, Haskell 的还没学完, PureScript 又来新的类型, 太难对付了
ChiangDi
2016-02-28 21:49:51 +08:00
你写个复杂的网站试试
shyling
2016-02-28 22:45:17 +08:00
@jiyinyiyong 可能我是偏向于实用派的吧,在我看来 Programming Language 只是表达的工具,更喜欢那些容易写(读)出,易于实现自己心里的模型的语言(也可能是我对 fp 了解还不够深,我觉得世界就是过程式的,有状态的|木有数学的脑细胞啊)
myid
2016-02-28 22:53:12 +08:00
@shyling 你说的过程式是一种抽象模型,只是众多模型的一种而已, fp 是另外一种。只有数学才是更底层更彻底的抽象。
shyling
2016-02-28 23:39:19 +08:00
@shyling 不认可。抽象本身就是处于高层。 monad 的抽象还不高层么?
shyling
2016-02-28 23:50:08 +08:00
@shyling 前面的指的 IO Monad
jiyinyiyong
2016-02-29 09:22:08 +08:00
@shyling 搞 Haskell 的人一般距离实用派有点远, 他们很多都是搞研究的, 比如前几天看的采访, 这位大姐专门研究类型系统, 主业就是 fork GHC 试验新理论, 还带着学生一起搞:
http://www.infoq.com/interviews/weirich-haskell-dependent-types
理论成果渐渐才能渗透到主流语言里被大量的程序员学习, 就像工地上盖楼的人不一定都要会计算建筑承重抗风 blabla 的数学的东西.

Haskell 虽然认为过程式有问题不能直接搞, 但并不是把装的抛弃了的, 只是说用局部变量(只是像局部变量, 实际上用 Monad)把状态管理起来了. 比较绕, 但是理解的话还是会认为有道理的. 越到复杂问题越有感觉.
shyling
2016-02-29 20:53:29 +08:00
@jiyinyiyong 今天突然想到了个问题:如何用 haskell 炒菜 0 0
jiyinyiyong
2016-02-29 22:54:37 +08:00
@shyling 我没 get 到这个 point...
shyling
2016-02-29 22:59:00 +08:00
@jiyinyiyong 意思是抽象出来炒菜的步骤(检查食材,出现错误的挽救办法 //例如盐放多了,炒菜的操作顺序)
jiyinyiyong
2016-03-01 09:40:55 +08:00
@shyling 好歹是图灵完全的语言, 这个事情是不怕的. 再不济你看用 Haskell 实现一门普通的脚本语言然后用这个脚本语言去写都可以的, 当然, 前提是 API 是现成的 :D
shyling
2016-03-01 12:02:56 +08:00
@jiyinyiyong 当然能实现啦,问题是怎么写好=。=
shyling
2016-03-01 12:03:18 +08:00
@jiyinyiyong 时间 /空间 /美观 综合考虑
bramblex
2016-03-01 12:29:29 +08:00
bramblex
2016-03-01 12:29:54 +08:00
@levn MT 还好啊……我倒是对 Arrow 之类的还没概念
bramblex
2016-03-01 12:31:36 +08:00
@shyling

你完全可以不写

Haskell 不是整天拿类型推导吹牛逼么?

因为:
类型推导 -> 你不写类型他也能给你推导出来
bramblex
2016-03-01 12:36:10 +08:00
@jiyinyiyong

类似 State Monad 这种东西, Monad 的作用是防止副作用扩散。比如 State Monad 就有一个 Unsafe 的,用的就是变量来管理 State 来提高性能。

对于过不过程式,这个东西没什么好讨论的,就是 CPS 变换的问题。 Haskell 里面的 do 语法糖就是干这事的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/259708

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX