haskell-jp / beginners #25 at 2024-08-14 12:05:41 +0900

ポイントフリーにより書かれたコードを、わかりやすいように展開するようなツールなどはありますか ?

以前 こちらで質問させていただき、ポイントフリー化するツールを教えていただきました

これの逆を行う様なツールは存在しますか ?
ghci> f = ((+1) .) . (+)
f :: Num c => c -> c -> c
ghci> f 1 2
4
it :: Num c => c

このとき、f が f a b = (+1) $ (+) a b のように展開されるようなイメージになります。
ghci> f a b = (+1) $ (+) a b
f :: Num a => a -> a -> a
ghci> f 1 2
4
it :: Num a => a

pointful を見つけました。 Web ツールとしては blunt というのがあったそうですが、今は消えています
https://github.com/23Skidoo/pointful
https://hackage.haskell.org/package/blunt
ご回答ありがとうございます。

私もそれは試してみたのですが (最初に報告すべきでした、すみません)
stack install をしてみると、以下のようなエラーとなってしまい利用できませんでした。

(oracle-cli) ubuntu@vm1:~/src/haskell-primer$ stack install pointful

Error: [S-4804]
       Stack failed to construct a build plan.

       While constructing the build plan, Stack encountered the following errors. The 'Stack
       configuration' refers to the set of package versions specified by the snapshot (after any
       dropped packages, or pruned GHC boot packages; if a boot package is replaced, Stack prunes
       all other such packages that depend on it) and any extra-deps:

       In the dependencies for pointful-1.1.0.0:
         * base must match >=4.7 && <4.13 || ^>=4.13, but base-4.18.2.1 is in the Stack
           configuration (latest matching version is 4.13.0.0).
         * haskell-src-exts-simple must match >=1.18 && <1.21 || ^>=1.21, but
           haskell-src-exts-simple-1.23.0.0 is in the Stack configuration (latest matching version
           is 1.21.1.0).
         * mtl must match >=2 && <2.2 || ^>=2.2, but mtl-2.3.1 is in the Stack configuration (latest
           matching version is 2.2.2).
         * transformers must match >=0.2 && <0.5 || ^>=0.5, but transformers-0.6.1.0 is in the Stack
           configuration (latest matching version is 0.5.6.2).
       The above is/are needed since pointful is a build target.

       Some different approaches to resolving some or all of this:

         * To ignore all version constraints and build anyway, pass --allow-newer, or, in
           /home/ubuntu/.stack/config.yaml (global configuration), set allow-newer: true.

         * To ignore certain version constraints and build anyway, also add these package names
           under allow-newer-deps: pointful.

         * Build requires unattainable version of the base package. Since base is a part of GHC, you
           most likely need to use a different GHC version with the matching base.

メッセージからすると、私の利用しているバージョンでは利用できないということだと思います。
(oracle-cli) ubuntu@vm1:~/src/haskell-primer$ ghc stack ghc -- --version
The Glorious Glasgow Haskell Compilation System, version 9.6.6
(oracle-cli) ubuntu@vm1:~/src/haskell-primer$ stack --version
Version 3.1.1, Git revision 8127279fb48012945f47f73167a5ecbce5692965 x86_64 hpack-0.37.0
こちらこそ未確認で申し訳ありません。古い GHC (8.8.4) を入れたらコンパイルできましたが、もうメンテナンスされていないのは辛いですね。
$ pointful '((+1) .) . (+)'
(\ x x0 -> (x + x0) + 1)
そこまで考えがいきませんでした orz

異なる環境に GHC をセットアップすることができますので、`pointful` を利用するために試してみたいと思います。

わざわざ試していただき、ありがとうございました。
もしも他の PC の利用をお考えでしたら、 ghcup set で GHC のバージョンを一時的に切り替えできます:
https://zenn.dev/mod_poppo/articles/haskell-setup-2023#ghc%E3%81%AE%E7%AE%A1%E7%90%86
(※ 新規に ghcup で GHC 等をインストールする場合は、 aptbrew など他のツールで入れた Haskell のツール類をアンインストールした方が良さそうです)
その場しのぎですみません!
先ほど ↑ を教えてもらう前に、`ghcup tui` で表示された画面から切り替えられるかな
と試して、よくわからないな。と諦めていたところです

教えてもらった通り、`ghcup install ghc 8.4.4` のように実行したら進むようになりました。

重ねてありがとうございました。