この文書は非常に難解な『関数ライブラリ』であるworldcomponentのリファレンスだ。このライブラリを使うことで、ライブラリ作者が推奨する『FRP』が実現可能になる。しかし、その基礎部分は高度な哲学的理論により構成されているため、使いこなすにはIQ145以上の頭脳が必要であり、一般人には理解することすら不可能であろう。
※ここでの『関数ライブラリ』や『FRP』という用語はライブラリ作者独自の概念が含まれており、一般的な意味とは異なることに注意されたい。
文字列msg
を出力する関数を返す。console.log.bind(console, msg)
と書いた場合と全く同じ動作になる。
関数func
を評価する。func()
と書いた場合と全く同じ動作になる。ただし、関数の戻り値を取得する方法や引数を渡す方法はない。
状態statをラップしたオブジェクトを返す。以下、このオブジェクトをworldobjと表記する。worldobjは状態を表すstateと関数の配列computingFを保持する。stateの初期値はundefined
であり、initではない。
関数func
を配列computingFの末尾の追加し、worldobj作成時に指定した初期値init
を状態stateに破壊的代入する関数を返す。破壊的代入後にこれまで配列computingFに追加された全てのfunc
(今回追加されるfunc
を含む)を初期値init
を引数として評価し、その戻り値でできた配列を作成する。ただし、作成された配列は使われることはなく、そのうちGCに回収される。返される関数を評価したときに戻り値はない。
value
を状態stateに破壊的代入する関数を返す。破壊的代入後にこれまで配列computingFに追加された全てのfunc
をvalue
を引数として評価すし、その戻り値できた配列を作成する。ただし、作成された配列は使われることはなく、そのうちGCに回収される。返される関数を評価したときに戻り値はない。
状態stateを返す。他の二つと違い、関数を返すのではなく、即座に評価される。また、上記のようにworldobj自体が状態stateが変化するmutableなオブジェクトであるため、worldobj.now()が返す値は常に同じとは限らず、参照透過ではない。
http://qiita.com/nonstarter/items/2763f5d85f2b8df3b18b#comment-ac07209ec169c66721ae