PureScript by Example 1 章を読む

この記事は [(bouzuya) PureScript Advent Calendar 2016](http://www.adventar.org/calendars/1494) の 5 日目です。 (bouzuya) PureScript Advent Calendar 2016 は bouzuya の PureScript 学習の記録です。

- ← 4 日目『 [PureScript の Getting Started を読む & 続 `psci` を試す - Qiita][2016-12-04] 』
- → 6 日目『 [PureScript by Example 2 章を読む - Qiita][2016-12-06] 』

## 概要

今日からは [PureScript by Example](https://leanpub.com/purescript/read) と [PureScript Language Guide](https://github.com/purescript/purescript/wiki/Language-Guide) を見ながら進めていきます。

[PureScript by Example には @hiruberuto 氏による翻訳 (へのリンクとその紹介)](http://qiita.com/hiruberuto/items/f1e048fc9a8ca51eddb2) があります。2016-12-05 時点では PureScript 0.7 向けのものの翻訳になっています。この記事にも書いてありますが、 PureScript 0.10.2 とは非互換の部分が多数あるので、注意が必要です。

ちなみに、ぼくが PureScript by Example を読んだのは 0.9 向けの分なのですが、先日 ( 2016-12 に入ってからだったかな ) 、0.10 向けの PureScript by Example が公開されました。きちんと保守されていて素晴らしいです。ぼくは購入済みだったので、メールで更新の通知がきました。

- [PureScript by Example](https://leanpub.com/purescript/read) 2016-12-05 現在 0.10 向け
- [実例による PureScript](http://hiruberuto.bitbucket.org/purescript/) 2016-12-05 現在 0.7 向け
- [PureScript Language Guide](https://github.com/purescript/purescript/wiki/Language-Guide) 対象バージョン不明

## PureScript by Example 1.1

JavaScript での関数型プログラミングを紹介しています。関数型プログラミングの強力さに触れつつも、 JavaScript でそれをしようとすると冗長さ・型付け・強力な抽象化を欠いているので、問題があると書かれています。

PureScript はその問題を解決するためにあるようです。軽量な構文・強力な抽象化を提供する型システム・読めるコードを高速に生成・ JavaScript との相互運用などの特徴があると書かれています。

言語の特徴だけで言えば、[www.purescript.org](http://www.purescript.org) のページ下部にキーワードで書かれていますね。

- Algebraic data types
- Pattern matching
- Type inference
- Type classes
- Higher kinded types
- Rank-N types
- Extensible records
- Extensible effects
- Modules
- Simple FFI
- No runtime system
- Human-readable output

まとめとして、 PureScriptは純粋関数型プログラミングの理論的な能力さと、fast-and-loose な JavaScript のプログラミングスタイルとの間で、実用的なバランスを取れているとのことです。

ふむ。

## PureScript by Example 1.2

翻訳をしたいわけではないので、要約のみで飛ばしていきます。

- PureScript は静的型付け言語 (statically typed language) です
- PureScript は ML や Haskell の型に影響されています
- PureScript は型推論 (type inference) をサポートしています
- PureScript は Haskell で知られる型クラス (type classes) を提供します

ふむ。

## PureScript by Example 1.3

- 関数の型などを提供することで、既存の JavaScript をインポートできます
- 開発の一部分にだけ PureScript を使うこともできます

ふむ。

## PureScript by Example 1.4

- PureScript by Example の前提条件について
- PureScript のコンパイラーはバイナリーでダウンロードするか Haskell の最新環境でソースからビルドできます
- PureScript by Example は PureScript `0.10.*` を対象にします

ふむ。

## PureScript by Example 1.5

- PureScript by Example の読者について
- JavaScript の基礎は知っている前提
- NPM や Gulp のような JavaScript エコシステムを知っていると標準設定をカスタマイズするのに良いですが、必須ではありません
- 関数型プログラミングの事前知識は必須ではありません
- Haskell に慣れていると考え方や構文が分かるでしょうが、同じだとは思わないほうがいいです

ふむ。

## PureScript by Example 1.6

- 読みかた
- 各章ごとに完結していますが、まずは前から読むと良いです
- 関数型プログラミングの考え方に慣れているなら、前半を読まなくてもある程度の理解を得られます
- 各章は新しい考え方のための動機づけとしてひとつの実用的な例に焦点をあてます
- PureScript 初心者への導入を目的としています

ふむ。

## PureScript by Example 1.7

- 助けがほしいなら
- IRC #purescript チャンネル
- [PureScript website](http://www.purescript.org/)
- [PureScript wiki](http://wiki.purescript.org/)
- [Try PureScript!](http://try.purescript.org/)
- [Pursuit](http://pursuit.purescript.org/)
- [github.com/purescript](https://github.com/purescript/)
- [github.com/purescript-node](https://github.com/purescript-node)
- [github.com/purescript-contrib](https://github.com/purescript-contrib)

GitHub の Organization は読み飛ばしていた。実例を見るうえで良さそう。

## PureScript by Example 1.8

- 著者について
- PureScript コンパイラーのオリジナルの開発者
- Haskell スキー
- [著者の Blog](http://functorial.com/)
- [著者の Twitter](http://twitter.com/paf31)

ふむ。フォローしました。

## PureScript by Example 1.9

- 謝辞

スルー。

## まとめ

1 章は概要だけでほとんどコードが出てこなかったので微妙でした。あと翻訳っぽくなるの良くないので、次から避けます。GitHub の organization あとで見ます。

## 次回以降の TODO

- `psc-package`
- PureScript by Example & PureScript Language Guide を読み進める
- [24 Days of PureScript, 2016][paf31/24-days-of-purescript-2016]
- [24 Days of PureScript, 2014](https://gist.github.com/paf31/8e9177b20ee920480fbc)
- 某氏の記事の紹介

[2016-12-01]: http://qiita.com/bouzuya/items/a5be85ec3e496e5bf436
[2016-12-02]: http://qiita.com/bouzuya/items/806335ea74ead0e33d95
[2016-12-03]: http://qiita.com/bouzuya/items/86cc9aaaddcc1aa790cf
[2016-12-04]: http://qiita.com/bouzuya/items/b2b80c22c50d0c1e739c
[2016-12-06]: http://qiita.com/bouzuya/items/4694ac25f68931115319
[paf31/24-days-of-purescript-2016]: https://github.com/paf31/24-days-of-purescript-2016