因为想尝试下新东西,在决定使用 ttalk.im 这个域名前我还做个很多很多的尝试,例如mate.im是使用 Elixir 开发的。当然还有一个叫 ailink.io 的网站,是使用 Clojure 开发的。
令一方面,在使用了很久的 Erlang 之后,感觉函数类语言比较适合自己,当然我也拿 Haskell 写过一些非 Web 的产品,为了让自己更加专注,所以就选择了全部使用函数类语言开发后端(Erlang 和 Haskell)。
因为自己对 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 作为一个 Web 框架,代码量非常少,非常轻量级。因此很多东西需要自己重新造轮子,但是也为每个人带来了很多灵活的地方,整个项目相当是我自己在 Scotty 基础上封装了一些便于操作数据库的东西。
Scotty 的优势:
Scotty 的缺陷:
Haskell 开发的 Web 项目,尤其是对大量的列表读取处理还是非常简单,因为有大量的工具函数,例如说 map,filiter,fold 等。 整个项目冗余代码偏多,并没有使用太多的 Haskell 的高级技巧,甚至没有使用 Class 来完成不同的数据类型进行同名操作。因此整个项目并不是优良的 Haskell 项目,但是依然不影响它作为一个 Scotty 入门教程的项目。
整个项目被开源放到了Github上,有兴趣的同学可以帮忙添加一些特性。