blog.bouzuya.net

2019-02-14 bouzuya/create-purescript-npm-bin 0.2.0 をつくった

bouzuya/create-purescript-npm-bin 0.2.0 をつくった。

create-purescript-npm-bin は npm initializer 。 PureScript での npx 向けの npm パッケージのひながたを生成できる。

npm initializer なので↓のように使う。

npm init @bouzuya/purescript-npm-bin

ぼくの用途に特化しているので事前に hub createnpm init --yesauthor が設定できないとダメなどの制約がある。そも npx 向けの npm パッケージを PureScript を使って……という状況自体があまり一般的とは思えないのだけど……。

生成されるプロジェクトは PureScript と spago 。最低限の npm run-scripts を入れている。

はじめ Thimoteus/purescript-snail 5.0.0 を試したのだけど非直感的な挙動が多いのとバグっぽいところがあってつくりなおした。

せっかくなので非直感的な挙動の例を挙げる。たとえば↓のように書いたとき。

cp (file "/foo/file") (folder "/bar") Nothing

第三引数はファイル名。おそらく cp /foo/file /bar な動きを期待すると思うのだけど。実際には cp /foo/file /bar/foo/file

バグっぽいのが↓。

(folder "foo") </> (file "file")

見た目からして foo/file になりそうだけど。実際は foofile 。区切り文字が挿入されない。バグじゃないの……これ。拡張子の結合に使うのかな……。なら (<.>) とかで良くないか……。 Folder -> File -> File だしな……。

(</>) なら↓もある。

(folder "foo") </> (folder "bar") </> (file "file")

↑で (</>) の型を書いたので分かる通りこれはコンパイルエラー。 Folder を 2 つは取れない。でも普通にありそう……このパスの整形。

あとは (>>) の見た目がモヤモヤしたり……。

諦めた。

代わりに slamdata/purescript-pathy でパスを扱って purescript-node/purescript-node-fs-aff などでファイルを扱った。

pathy は型がいやに厳格だし sandbox の対応が面倒。あとは purescript/package-sets に含まれていない。必要以上に遠回りした。

明日以降は create-purescript-npm-bin を使って CLI を書いていく。週末の w010 もこれを使うつもりで居る。