Haskell TTalkIM 的开发笔记

davidgao · July 27, 2017 · 6624 hits

为什么是 Haskell

因为想尝试下新东西,在决定使用 ttalk.im 这个域名前我还做个很多很多的尝试,例如mate.im是使用 Elixir 开发的。当然还有一个叫 ailink.io 的网站,是使用 Clojure 开发的。

令一方面,在使用了很久的 Erlang 之后,感觉函数类语言比较适合自己,当然我也拿 Haskell 写过一些非 Web 的产品,为了让自己更加专注,所以就选择了全部使用函数类语言开发后端(Erlang 和 Haskell)。

Web 开发选型

因为自己对 Haskell 的功底并没有达到很高的境界,就没有选择 Haskell 开发 Web 的神奇 Yesod,而是选择比较轻量级的 Scotty,当然当时也有想尝试 Spock(Live long and prosper 或者 Peace and long life)的想法。不过因为自己已经看了好一段时间 Scotty 的代码,所以就决定使用了 Scotty。

选择 Postgresql-simple 完全是因为自己还不想接触复杂的 Haskell Teamplate,并且为了让整个项目看起来不太恐怖(比较害怕哪天自己都不知道自己在写什么)。

选择 Blaze-html 的原因是因为个人一贯喜欢吧 View 直接写成代码,而不是渲染模板文件的原因,但是从生产角度上来讲,渲染模板文件的做法才更加实际。

前端 CSS 框架并没有使用大家所熟知的 Bootstrap,而是选择使用了 semantic-ui,也是为了尝试些新的东西。不过在 JS 的选择上,并没有选择比较花哨的 ReactJS 或 Vue 这类的,更多是简单的 JQuery,因为这个项目的重点是后端 Haskell 开发 Web 的实践。

Scotty 使用心得

Scotty 作为一个 Web 框架,代码量非常少,非常轻量级。因此很多东西需要自己重新造轮子,但是也为每个人带来了很多灵活的地方,整个项目相当是我自己在 Scotty 基础上封装了一些便于操作数据库的东西。

Scotty 的优势:

  1. 轻量级,代码简单,有问题可以直接翻代码
  2. 上手曲线平滑,没有大的波动
  3. 路由解析和异常处理非常完善
  4. 性能非常好

Scotty 的缺陷:

  1. 没有 URI 相关操作工具
  2. 不提供很多常见的组件,例如说 Cache,Cookie,CSRF 等

整个项目总结

Haskell 开发的 Web 项目,尤其是对大量的列表读取处理还是非常简单,因为有大量的工具函数,例如说 map,filiter,fold 等。 整个项目冗余代码偏多,并没有使用太多的 Haskell 的高级技巧,甚至没有使用 Class 来完成不同的数据类型进行同名操作。因此整个项目并不是优良的 Haskell 项目,但是依然不影响它作为一个 Scotty 入门教程的项目。

代码地址

整个项目被开源放到了Github上,有兴趣的同学可以帮忙添加一些特性。

No Reply at the moment.
You need to Sign in before reply, if you don't have an account, please Sign up first.