Help us understand the problem. What is going on with this article?

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

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 にコピーされます。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした