需求:搭建一个灵活且通用的编写编译Haskell代码的方案。要求Windows,Linux,Mac三端通用,且迁移代码代价最小
首先找到一个最方便的Haskell编写IDE
选择方案有如下。IDEA+Haskell插件,Ecelipse+Haskell插件,VSCode+Hashkell插件,Vim+Haskell插件,Xmonad(没用过),Mac App Store的Haskell。
如果选择插件方案,需要考虑是采用Stack还是Cabal。目前Haskell开发推荐Stack工具
首先idea+haskell插件方案,Eclipse+插件功能太老,不能考虑。VSCode+Haskell插件有多个选择,但是没有快捷执行方案。Vim+Haskell插件适合大佬。Xmonad安装要求太高。
IDEA+Haskell插件功能,需要支持ghc-mod.该方案由于Cabal和Haskell的升级,已经不太适合。最后定的方案为Mac App Store的Haskell for Mac.
我目前使用的HFM版本为1.7.0(1527 MAS).软件直接下载安装即可。需要注意的是,HFM自带的GHC为8.6.4,对应的LTS为13.14。
使用时,按官方文档即可,如果需要安装lib,直接选择Target->Pageage Manager,输入关键字即可。我这里安装过mysql-haskell-0.8.4.2。
但是这里有一个问题,HFM不支持启动中断型应用。也就是如果你想启动一个Web服务器,那是不可能的。因为他的后台会不断的重启执行程序。所以只能考虑外部执行。
外部执行有两种方案:
1.本机执行。这里可以直接采用HFM的Target->Run/Install.这样就可以新开控制台来执行。
2.外机执行。毕竟生产环境不太可能采用MAC。所以需要找到一个方案来打包执行我们的代码。
这里以Centos 7 为例。首先大家可以安装一个裸环境,我的是Centos7.5
1) 执行 curl -sSL https://get.haskellstack.org/ | sh
2)stack upgrade
3)yum install gmp-devel (因为我先安装了Cabal,采用runhaskell提示失败,感觉gmp-devel是需要的)
4) stack new helloworld new-template 来创建一个新的stack工程
至此我们完成了外机的编译环境搭建,接下来我们需要管理外机和HFC的版本(如果不关联还有什么意义呢)
1.打开项目下的stack.yaml.修改resolver的值为lts-13.14
2.在extra-deps下面添加需要的lib。例如
extra-deps:
- extra-1.6.14
- mysql-haskell-0.8.4.2
3. 修改xxx.cabal,在build-depends下面添加需要的lib(这里就不细说了,可以参考其他文档)
4. 执行stack build .顺利的话会提示开始下载ghc-8.6.4和相关lib(视网络情况而定)
至此我们就使用了最佳的IDE和一个无关OS的编译方式,大家可以快乐的写Haskell代码了。
如果大家在使用Haskell方面有任何问题,欢迎留言