2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

stylish-haskellをHexFloatLiteralsやNumericUnderscoresに対応させる

Posted at

Qiitaを漁っていたらちょうど似たようなトピックで記事を書いている方がいました:

stylish-haskellとhaskell-src-extsとGHC拡張について

stylish-haskellはhaskell-src-extsというライブラリを使ってHaskellのソースコードをパースしていますが、haskell-src-extsは最新のGHC拡張に対応していません。その結果、最新のGHC拡張を使ったコードにstylish-haskellを適用しようとすると失敗します。筆者が気になったのはHexFloatLiteralsとNumericUnderscoresです。

brittanyなどの、GHCを使ってHaskellコードをパースするフォーマッターに乗り換えるのも一つの手です。しかし、フォーマッターの好みなどの問題から、ここではあくまでstylish-haskellを使いたいものとします。

長期的には、stylish-haskellがGHCを使ってHaskellコードをパースするように望ましいと思います。実際、GitHubにはそういうIssueがあって、作者も前向きです:

ですが、これは今すぐに実現する話ではないので、短期的にはhaskell-src-extsをいじって新しいGHC拡張に対応させるのが早いでしょう。

「haskell-src-extsをいじって」と書きましたが、HexFloatLiteralsとNumericUnderscoresについてはすでに有志が実装してPRを送っています。ここでは、そのPRを取り込んだhaskell-src-extsを利用してstylish-haskellをビルドします。

haskell-src-extsをHexFloatLiteralsとNumericUnderscoresに対応させるPR:

手順

まず、stylish-haskellを適当なディレクトリにチェックアウトします。

$ git clone https://github.com/jaspervdj/stylish-haskell.git
$ cd stylish-haskell

stack.yamlを開き、extra-depsの haskell-src-exts への言及をコメントアウトし、代わりにgitリポジトリのURLとコミットのハッシュを書き加えます。このハッシュは、上記のPRのものです。

resolver: lts-15.6
packages:
- '.'

extra-deps:
# - 'haskell-src-exts-1.23.0'
- git: https://github.com/merc1031/haskell-src-exts.git
  commit: 2376655f889d170e16b9836b2ae1147f6a074caa

出来合いのPRではなく、自前で改変したhaskell-src-extsを使いたい場合は、extra-depsを消してpackagesの部分にローカルのディレクトリを指定すれば良いはずです(未検証):

packages:
- '.'
- '../haskell-src-exts'

あとは stack install すればHexFloatLiteralsとNumericUnderscoresに対応した stylish-haskell~/.local/bin にコピーされます。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?