V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
myid
V2EX  ›  Haskell

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

  •  
  •   myid · 2016-02-28 21:12:46 +08:00 · 7727 次点击
    这是一个创建于 3196 天前的主题,其中的信息可能已经有所发展或是发生改变。
    22 条回复    2023-05-26 02:19:18 +08:00
    shyling
        1
    shyling  
       2016-02-28 21:29:36 +08:00
    我一直都有点疑问
    func :: a -> [a]
    func x = yyy

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

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

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

    你完全可以不写

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

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

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

    对于过不过程式,这个东西没什么好讨论的,就是 CPS 变换的问题。 Haskell 里面的 do 语法糖就是干这事的。
    bramblex
        21
    bramblex  
       2016-03-01 12:42:11 +08:00   ❤️ 1
    @shyling

    其实很多时候我都会手动标示类型,因为这个类型是给人看的(比如自己)……

    对编译器来说,大部分他都能推导……
    ireina
        22
    ireina  
       2023-05-26 02:19:18 +08:00
    @levn 继续往下学,你会看到 Free monad 和 algebraic effects ,中间你还会尝试 finally tagless 和 readerT pattern 。参数式抽象发挥到极致就会变成 Haskell 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3489 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:43 · PVG 12:43 · LAX 20:43 · JFK 23:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.