Hasteを試したログ
GHCJSの重さが気になっていたところで、こんな記事を見かけた。
qiita.com
Hasteが良さそうなので試してみる。
Hasteのプロジェクトの作り方は stack new した後に
stackoverflow.com
該当箇所をここの設定に書き換える。
% stack exec haste-boot ... Installed haste-prim-0.5.4.2 Warning: The package list for 'hackage.haskell.org' does not exist. Run 'cabal update' to download it. Resolving dependencies... haste-cabal.bin: Could not resolve dependencies: trying: time-1.5.0.1 (user goal) next goal: deepseq (dependency of time-1.5.0.1) Dependency tree exhaustively searched.
エラーになった。
再度トライ。
% stack exec haste-boot -- --local Downloading haste-cabal from GitHub Downloading Google Closure compiler... `include' is not a directory
エラー。
% mkdir include % stack exec haste-boot -- --local Downloading haste-cabal from GitHub Downloading Google Closure compiler... utils/unlit: changeWorkingDirectory: does not exist (No such file or directory)
エラーが素っ気ないのでよく分からないけど、--localでhasteのソースを探しているのか…。
https://github.com/valderman/haste-compiler/issues/395
この辺を見ると解決しているような気がする。
stack.yaml を変更してもう一度トライ。
extra-deps: - haste-compiler-0.5.5.1 - ghc-simple-0.3 - shellmate-0.2.3 - HTTP-4000.2.23
stack build stack install haste-compiler stack exec haste-boot
同じエラーになった。
どうにもならないのでソースから入れる。
github.com
git clone https://github.com/valderman/haste-compiler.git cd haste-compiler stack build stack install stack exec haste-boot
何の問題もなく入った。
バージョンが0.6.0.0になっていたので、stack.yamlのバージョンを変えたら入るんだろうか。
resolver: lts-6.14 extra-deps: - haste-compiler-0.6.0.0 - ghc-simple-0.3 - shellmate-0.3.4.2 - shellmate-extras-0.3.4.1 - http-conduit-2.2.4 - http-client-0.5.14 - http-client-tls-0.3.5.3 - tagged-0.8.6
stackoverflow.com
うーん、stack build --copy-compiler-tool haste-compiler は何か違うっぽい。
取り敢えずここまでのソースから入れたあとの設定を最初からやる。
stack new haste-project cd haste-project
compilerは使わないのでhaste-libだけ書く。
.cabal
build-depends: base >=4.7 && <5 , haste-lib
stack.yaml
resolver: lts-6.14 packages: - . extra-deps: - haste-lib-0.6.0.0 - binary-0.7.6.1 - containers-0.5.6.3 - haste-prim-0.6.0.0 - time-1.5.0.1
これでstack build出来るし、import Hasteできた。
GHCのバージョンが古くてinteroが動かなくなったので intero.el を修正する。
(defun intero-copy-compiler-tool-auto-install (source-buffer targets buffer) "Automatically install Intero appropriately for BUFFER. Use the given TARGETS, SOURCE-BUFFER and STACK-YAML." (let ((ghc-version (intero-ghc-version-raw))) (insert (format " Installing intero-%s for GHC %s ... " intero-package-version ghc-version)) (redisplay) (cl-case (let ((default-directory (make-temp-file "intero" t))) (intero-call-stack nil (current-buffer) t nil "build" "--copy-compiler-tool" (concat "intero-" intero-package-version) "--flag" "haskeline:-terminfo" "--resolver" (concat "ghc-" ghc-version) ;; "haskeline-0.7.5.0" "haskeline-0.7.4.0" "ghc-paths-0.1.0.9" "mtl-2.2.2" "network-2.7.0.0" "random-1.1" "syb-0.7")) (0 (message "Installed successfully! Starting Intero in a moment ...") (bury-buffer buffer) (switch-to-buffer source-buffer) (intero-start-process-in-buffer buffer targets source-buffer))
haskeline のバージョンを下げる。
intero自体のバージョンはdefcustomで変更できるようになってるんだけど、この依存ライブラリは固定なので直接編集するしかない。
編集したらbytecompileして起動確認。
初期のファイルを
module Lib ( someFunc ) where import Haste someFunc :: IO () -- someFunc = putStrLn "someFunc" someFunc = writeLog $ toJSString "someFunc"
console.log出力に変えてコンパイル。
#!/bin/bash TARGET=compiled.js set -eux mkdir -p build hastec -O2 -fglasgow-exts \ --opt-minify --opt-minify-flag='--jscomp_off=checkVars' \ -o build/compiled.js \ --outdir=build \ app/*.hs src/*.hs
24KBになった。
自分でclosure compilerを実行したときより誤差程度軽い。
最初のURLの比較のように3KBには遠い。
バージョンが上がって機能が増えて重くなったんだろうか。
とりあえず一旦ここまで。