Haskell Study 1

一切内容从这里开始 Learn You a Haskell for Great Good!
目前看完了第六章Higher Order Functions
先说一下总体感觉:

  1. 这是一个Function 编程语言,Function是第一公民,没有严格语法语义,非常灵活
  2. 读到现在,我感觉被各种语法糖🍬围绕着,熟悉面向对象编程的朋友们,我觉得你会发现这里的标准写法像是各种语法糖。糖有点多~
  3. 如果学习Python是难度为3的话,我觉得学习Haskell应为7或8,满分10分。我的上线标准,应该是Rust吧。
  4. 感觉官方网站没有给出太多直接的文档,当然不如Python文档来的直接,不知道语言推广者是怎么考虑的
  5. 读到六章末尾时逐步发现很多晦涩难懂的语法糖写法,其实有更容易让人理解的书写方式,并深深感觉到其中数据公式的味道
  6. 目前都是代码片段和语法讲解,没有看见全貌,看看Modules开始有没有更多应用开发,工程构建相关的内容

工程为什么要选择Haskell,这是我一直关心的问题,选择它一定是有它的优势所在,这个可能稍后才能找到答案,先说说目前看到的Haskell语言特点:

  • Purely Functional,纯函数,这个前面说到了,函数套函数,一切都可以为函数,可以把函数当作参数,可以把函数进行嵌套,组合等等。反正你的思维方式就是:我要用哪些函数,如何编排来完成我的task

  • Lazy,惰性,Haskell可以按需调用,可以延迟表达式评估,直到其被需要或者访问为止,避免资源浪费,从而减少功能执行时间。这个话听的是不是没啥感觉,我目前的理解是:

    1
    2
    3
    4
    5
    -- 这里将无限循环产生奇数
    [1,3..]
    -- 而这里只会拿到前五个奇数,后面的无限循环消失了
    -- 我理解为这是惰性的体现,如果以后我发现错了我会纠正这里
    take 5 [1,3..]
  • Package,Haskell是开源的,其也有包管理平台,大家维护了很多实用的包,这一点也符合现代语言的特性

  • Statically Typed,每个表达式的类型都是在编译时确定的。如果在运行时不匹配,程序将被编译器终止

  • Type Inference,与Python类似,Haskell可以做类型推断。他还有Typeclass 这样的概念,可以表示范型接口,对类型进行约束。

开发环境 和 相关信息

现在使用 Visual Code 加 Haskell 插件进行练习
其实也发现了Idea中也有相关的插件,稍后再试试吧

对于初学的我来说,Hoogle 是非常需要的,可以查找各种function的解释,甚至是源码
相当于hackage.haskell.org中文档的专属搜索

前六章总结

  • 基本语法,命令行模式下一通敲,没啥好说的
  • 定义自己的模块文件baby.hs 在里面写了一些方法,通过:l 进行加载(前面是小写L哦,通过这个指令我猜出了:q指令😛)
  • 基本类型,[char] 和 String 是相同的,Int 和 Integer 是不同的,还有其它基础类型
  • Type variable 相当于范型,Typeclasses 是类型接口约束,它的底层具体实现我没有看,官方文档中Eq的源码竟然没有,额~~~
  • 函数定义,多条件处理,以及方法内的where使用,Let In定义即使用。_ 和 | 的使用
  • 递归使用,Python也可以做到类似的效果,原理一样,就是在function编程模式下,code可以更为极致
  • 常用function讲解,map,filter等。Lambda表达式写法(\),我很喜欢,思路一下子简化了不少。而foldl和scanl的相关用法,让我我思考很久
  • $ 和 . 这两个对function的简化感觉很好,我想我今后会经常使用的

后续任务和问题

  • 学完这个教程先
  • 如何构建一个工程,如何编译运行
  • 如何debug,如何排错,如何了解其运行时状况及性能

总结

利用周末时间看了此教程,总体学习速度不是很快,很多点需要反复理解。网上相关资料也不是很丰富,感觉是个较偏的语言
但,这个语言的学习给我带来了不一样的思考方式,十分有意思。会对我今后其它语言的学习使用或功能设计开发有帮助。

题外话

顺便看了一下Java8到Java16的变化,下一个LTS版本是17,计划年底切换到17上
有几个新特性还是值得期待的。才发现flight recorder 这个挺有意思,还有JMC

Python的学习和AWS的学习还在继续,稍后会写一些这方面的总结吧。找时间,找时间~

时间有限啊,想做的事情太多。对了,周末尝试学习了一下冥想🧘‍♂️,额~我睡着了~呵呵。
后面再练练,激发正念~

由于最近周围地区疫情有所抬头,暂停了游泳活动,很不开心。为了保持体力,每天500个跳绳+拉伸运动走起。

团队入职了一些新人,周二给他们做个培训,不知道以后会怎样~