Sblog 开发笔记

为什么是Haskell

因为想尝试下新东西,在决定使用ttalk.im这个域名,当然现在的你所看到的,已经不是Sblog。前我还做个很多很多的尝试,例如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上,有兴趣的同学可以帮忙添加一些特性。

Power by Vultr and AiWiki
Copyright © 2019 David Fox All Rights Reserved.