Suche senden
Hochladen
Purescript with Monad
•
10 gefällt mir
•
13,411 views
Kousuke Ruichi
Folgen
天下一altJS武闘会(2014/06/08) PureScript枠発表です。
Weniger lesen
Mehr lesen
Wissenschaft
Melden
Teilen
Melden
Teilen
1 von 60
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Chainer, Cupy入門
Chainer, Cupy入門
Yuya Unno
Final LINQ Extensions
Final LINQ Extensions
Kouji Matsui
Emcjp item33,34
Emcjp item33,34
MITSUNARI Shigeo
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Ohsawa Goodfellow
[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章
Haruki Eguchi
最先端NLP勉強会2017_ACL17
最先端NLP勉強会2017_ACL17
Masayoshi Kondo
Deep learning勉強会20121214ochi
Deep learning勉強会20121214ochi
Ohsawa Goodfellow
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
Kamiya Toshihiro
Empfohlen
Chainer, Cupy入門
Chainer, Cupy入門
Yuya Unno
Final LINQ Extensions
Final LINQ Extensions
Kouji Matsui
Emcjp item33,34
Emcjp item33,34
MITSUNARI Shigeo
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Ohsawa Goodfellow
[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章
Haruki Eguchi
最先端NLP勉強会2017_ACL17
最先端NLP勉強会2017_ACL17
Masayoshi Kondo
Deep learning勉強会20121214ochi
Deep learning勉強会20121214ochi
Ohsawa Goodfellow
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
Kamiya Toshihiro
論文紹介 Star-Transformer (NAACL 2019)
論文紹介 Star-Transformer (NAACL 2019)
広樹 本間
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
Kamiya Toshihiro
多相な関数の定義から学ぶ、型クラスデザインパターン
多相な関数の定義から学ぶ、型クラスデザインパターン
Taisuke Oe
ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装
Ryosuke Okuta
Clojure
Clojure
Uehara Junji
「深層学習」勉強会LT資料 "Chainer使ってみた"
「深層学習」勉強会LT資料 "Chainer使ってみた"
Ken'ichi Matsui
Final LINQ Extensions II
Final LINQ Extensions II
Kouji Matsui
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015
Ryosuke Okuta
はじぱた7章F5up
はじぱた7章F5up
Tyee Z
Chainer Meetup LT (Alpaca)
Chainer Meetup LT (Alpaca)
Jun-ya Norimatsu
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
啓 小笠原
Transformerを雰囲気で理解する
Transformerを雰囲気で理解する
AtsukiYamaguchi1
科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要
Toshihiro Kamishima
[第2版]Python機械学習プログラミング 第9章
[第2版]Python機械学習プログラミング 第9章
Haruki Eguchi
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
洋史 東平
Chainer meetup20151014
Chainer meetup20151014
Jiro Nishitoba
Practical recommendations for gradient-based training of deep architectures
Practical recommendations for gradient-based training of deep architectures
Koji Matsuda
論文紹介:「End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF」
論文紹介:「End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF」
Naonori Nagano
Rubyの御先祖CLUのお話(原本)
Rubyの御先祖CLUのお話(原本)
洋史 東平
Deep learning実装の基礎と実践
Deep learning実装の基礎と実践
Seiya Tokui
Elm overview
Elm overview
dsuke Takaoka
IdrisでWebアプリを書く
IdrisでWebアプリを書く
Hideyuki Tanaka
Weitere ähnliche Inhalte
Was ist angesagt?
論文紹介 Star-Transformer (NAACL 2019)
論文紹介 Star-Transformer (NAACL 2019)
広樹 本間
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
Kamiya Toshihiro
多相な関数の定義から学ぶ、型クラスデザインパターン
多相な関数の定義から学ぶ、型クラスデザインパターン
Taisuke Oe
ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装
Ryosuke Okuta
Clojure
Clojure
Uehara Junji
「深層学習」勉強会LT資料 "Chainer使ってみた"
「深層学習」勉強会LT資料 "Chainer使ってみた"
Ken'ichi Matsui
Final LINQ Extensions II
Final LINQ Extensions II
Kouji Matsui
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015
Ryosuke Okuta
はじぱた7章F5up
はじぱた7章F5up
Tyee Z
Chainer Meetup LT (Alpaca)
Chainer Meetup LT (Alpaca)
Jun-ya Norimatsu
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
啓 小笠原
Transformerを雰囲気で理解する
Transformerを雰囲気で理解する
AtsukiYamaguchi1
科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要
Toshihiro Kamishima
[第2版]Python機械学習プログラミング 第9章
[第2版]Python機械学習プログラミング 第9章
Haruki Eguchi
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
洋史 東平
Chainer meetup20151014
Chainer meetup20151014
Jiro Nishitoba
Practical recommendations for gradient-based training of deep architectures
Practical recommendations for gradient-based training of deep architectures
Koji Matsuda
論文紹介:「End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF」
論文紹介:「End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF」
Naonori Nagano
Rubyの御先祖CLUのお話(原本)
Rubyの御先祖CLUのお話(原本)
洋史 東平
Deep learning実装の基礎と実践
Deep learning実装の基礎と実践
Seiya Tokui
Was ist angesagt?
(20)
論文紹介 Star-Transformer (NAACL 2019)
論文紹介 Star-Transformer (NAACL 2019)
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
多相な関数の定義から学ぶ、型クラスデザインパターン
多相な関数の定義から学ぶ、型クラスデザインパターン
ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装
Clojure
Clojure
「深層学習」勉強会LT資料 "Chainer使ってみた"
「深層学習」勉強会LT資料 "Chainer使ってみた"
Final LINQ Extensions II
Final LINQ Extensions II
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015
はじぱた7章F5up
はじぱた7章F5up
Chainer Meetup LT (Alpaca)
Chainer Meetup LT (Alpaca)
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
Transformerを雰囲気で理解する
Transformerを雰囲気で理解する
科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要
[第2版]Python機械学習プログラミング 第9章
[第2版]Python機械学習プログラミング 第9章
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
Chainer meetup20151014
Chainer meetup20151014
Practical recommendations for gradient-based training of deep architectures
Practical recommendations for gradient-based training of deep architectures
論文紹介:「End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF」
論文紹介:「End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF」
Rubyの御先祖CLUのお話(原本)
Rubyの御先祖CLUのお話(原本)
Deep learning実装の基礎と実践
Deep learning実装の基礎と実践
Andere mochten auch
Elm overview
Elm overview
dsuke Takaoka
IdrisでWebアプリを書く
IdrisでWebアプリを書く
Hideyuki Tanaka
Scalaのオブジェクトの話
Scalaのオブジェクトの話
Yasuyuki Maeda
ゆるふわなHaskell話
ゆるふわなHaskell話
Kousuke Ruichi
GopherJS + Nashorn
GopherJS + Nashorn
Takuya Ueda
並行プログラミングと継続モナド
並行プログラミングと継続モナド
Kousuke Ruichi
非ガチ勢「よし、Coffee script使おう!」
非ガチ勢「よし、Coffee script使おう!」
Muyuu Fujita
php.js
php.js
Kenta USAMI
Programming haskell chapter10
Programming haskell chapter10
Kousuke Ruichi
An engineer uses monads
An engineer uses monads
Kousuke Ruichi
Elmで始めるFunctional Reactive Programming
Elmで始めるFunctional Reactive Programming
Yasuyuki Maeda
altJSの選び方
altJSの選び方
terurou
Haskell Day2012 - 参照透過性とは何だったのか
Haskell Day2012 - 参照透過性とは何だったのか
Kousuke Ruichi
Yesod勉強会
Yesod勉強会
Hideyuki Tanaka
すごいHaskell 第7章 型や型クラスを自分で作ろう(前編)
すごいHaskell 第7章 型や型クラスを自分で作ろう(前編)
Nozomu Kaneko
Scalaで型クラス入門
Scalaで型クラス入門
Makoto Fukuhara
Yesodを支える技術
Yesodを支える技術
Hiromi Ishii
Monad tutorial
Monad tutorial
Hideyuki Tanaka
altJS勉強会「Haxeすごいからみんな使え!」
altJS勉強会「Haxeすごいからみんな使え!」
政樹 尾野
関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
Andere mochten auch
(20)
Elm overview
Elm overview
IdrisでWebアプリを書く
IdrisでWebアプリを書く
Scalaのオブジェクトの話
Scalaのオブジェクトの話
ゆるふわなHaskell話
ゆるふわなHaskell話
GopherJS + Nashorn
GopherJS + Nashorn
並行プログラミングと継続モナド
並行プログラミングと継続モナド
非ガチ勢「よし、Coffee script使おう!」
非ガチ勢「よし、Coffee script使おう!」
php.js
php.js
Programming haskell chapter10
Programming haskell chapter10
An engineer uses monads
An engineer uses monads
Elmで始めるFunctional Reactive Programming
Elmで始めるFunctional Reactive Programming
altJSの選び方
altJSの選び方
Haskell Day2012 - 参照透過性とは何だったのか
Haskell Day2012 - 参照透過性とは何だったのか
Yesod勉強会
Yesod勉強会
すごいHaskell 第7章 型や型クラスを自分で作ろう(前編)
すごいHaskell 第7章 型や型クラスを自分で作ろう(前編)
Scalaで型クラス入門
Scalaで型クラス入門
Yesodを支える技術
Yesodを支える技術
Monad tutorial
Monad tutorial
altJS勉強会「Haxeすごいからみんな使え!」
altJS勉強会「Haxeすごいからみんな使え!」
関数プログラミング入門
関数プログラミング入門
Ähnlich wie Purescript with Monad
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
Ryosuke MATSUMOTO
20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public
Kazuaki Ishizaki
Oedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうか
Oedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうか
Minero Aoki
第2回 配信講義 計算科学技術特論B(2022)
第2回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI
Mod mrubyについて
Mod mrubyについて
Ryosuke MATSUMOTO
ATN No.2 Scala事始め
ATN No.2 Scala事始め
AdvancedTechNight
RubyによるMac OS Xデスクトップアプリケーション開発入門
RubyによるMac OS Xデスクトップアプリケーション開発入門
宏治 高尾
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Tomoharu ASAMI
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf
Kazuaki Ishizaki
2014 11-20 Machine Learning with Apache Spark 勉強会資料
2014 11-20 Machine Learning with Apache Spark 勉強会資料
Recruit Technologies
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
京大 マイコンクラブ
100mpusとopc brick ev3 ご紹介
100mpusとopc brick ev3 ご紹介
Akira Hatsune
エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造
エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造
Etsuji Nakai
Scalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミング
Jun Saito
Hpc server講習会第3回応用編
Hpc server講習会第3回応用編
Osamu Masutani
20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public
Kazuaki Ishizaki
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
Tadayoshi Sato
オブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programming
Tomoharu ASAMI
Silkによる並列分散ワークフロープログラミング
Silkによる並列分散ワークフロープログラミング
Taro L. Saito
2014年の社内新人教育テキスト #1(プログラミング言語概論)
2014年の社内新人教育テキスト #1(プログラミング言語概論)
Shin-ya Koga
Ähnlich wie Purescript with Monad
(20)
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public
Oedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうか
Oedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうか
第2回 配信講義 計算科学技術特論B(2022)
第2回 配信講義 計算科学技術特論B(2022)
Mod mrubyについて
Mod mrubyについて
ATN No.2 Scala事始め
ATN No.2 Scala事始め
RubyによるMac OS Xデスクトップアプリケーション開発入門
RubyによるMac OS Xデスクトップアプリケーション開発入門
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf
2014 11-20 Machine Learning with Apache Spark 勉強会資料
2014 11-20 Machine Learning with Apache Spark 勉強会資料
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
100mpusとopc brick ev3 ご紹介
100mpusとopc brick ev3 ご紹介
エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造
エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造
Scalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミング
Hpc server講習会第3回応用編
Hpc server講習会第3回応用編
20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
オブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programming
Silkによる並列分散ワークフロープログラミング
Silkによる並列分散ワークフロープログラミング
2014年の社内新人教育テキスト #1(プログラミング言語概論)
2014年の社内新人教育テキスト #1(プログラミング言語概論)
Purescript with Monad
1.
なぜMonadが必要なのか、 あるいはPureScriptについて @ruicc 2014-06-08
2.
だれ @ruicc Haskeller サーバサイドエンジニア 興味あること:設計、型理論、圏論
3.
PureScript =
Lightweight Haskell
4.
ということで Monadの話をします(2min)
5.
エンジニアから見たMonad (大雑把) コンストラクタパターン ただし超汎用性高い ただし超柔軟性高い
6.
Monadは何を構築するのか? 複雑なデータ 関数 プログラム(任意の作用を含む)
7.
リアルワールドにおける 問題テンプレ 型A, Bが与えられているとする solve ::
(A -> B) -> IO () 特定の問題を解く任意の高階関数を想像して下さい 返り値 IO () は単純のため
8.
具体例1. Parser parse ::
Parser a -> String -> Either Errors a type Parser a = String -> [(a, String)] --This is a naive definition of parsers.
9.
具体例2. WAI -- WAI
= Web Application Interface run :: Port -> Application -> IO () type Application = Request -> IO Response
10.
リアルワールドにおける ライブラリ提供問題 先ほどの関数solveを考える solve :: (A
-> B) -> IO () 関数(A -> B)は実装に幅をもつ 関数(A -> B)はどこまでも複雑になり得る ライブラリはユーザへ関数(A -> B)を構築する手段を 提供したい
11.
ライブラリ提供問題 どうする? オブジェクト指向言語 例えばクラスをフレームワークとして提供 Haskell, PureScript, etc. 例えばMonadをフレームワークとして提供
12.
具体例1. Parserの場合 Parser構築手段をMonadで提供 Parser Combinatorsと呼ばれる
13.
具体例2. WAIの場合 Application構築手段をMonadで提供 Scotty RouterとControllerをMonadで記述 Yesod Controllerやクエリ言語をMonadで記述
14.
Monadユースケース
15.
Monadの使いどころ 特定の目的のための値が欲しい パラメータによる汎用化が困難な問題 目的毎に値を構築する必要がある 構築した値は再利用したい
16.
ユースケース1. Parser 文字列等をパーズするためのパーザがほしい パラメータによる汎用化が困難な問題 パーズ対象毎にパーザを構築する必要がある 構築したパーザは再利用したい
17.
ユースケース2. EventHandler イベント処理ためのEventHandlerがほしい パラメータによる汎用化が困難な問題 イベント毎にEventHandlerを構築する必要がある 構築したEventHandlerは再利用したい
18.
ユースケース3. CSSアニメー ション CSSアニメーションためのCSSビルダがほしい パラメータによる汎用化が困難な問題 アニメーション毎にCSSビルダを構築する必要がある 構築したCSSビルダは再利用したい
19.
ユースケース4. JavaScript ブラウザ用動作記述ためのJSビルダがほしい パラメータによる汎用化が困難な問題 機能毎にJSビルダを構築する必要がある 構築したJSビルダは再利用したい
20.
ユースケース5. DSL とあるDSLためのDSL記述言語がほしい パラメータによる汎用化が困難な問題 機能毎にDSL記述言語を構築する必要がある 構築したDSL記述言語は再利用したい
21.
Monad三行まとめ 型で表現可能な任意の値を 構築するための 一手段に過ぎない
22.
そろそろMonadが欲しくなっ てきた頃と思います
23.
あなたの言語にMonadを取り 入れるために Required primitives Variables, First
class functions, Function application Required Type system features Higher Kinded Polymorphism 無くても大丈夫らしい? @khibinoさん情報 Overload(ex. Type Classes) Do notation
24.
25.
PureScriptの話(出来るところまで)
26.
Haskeller向け説明(15sec)
27.
28.
何が無いのか GADTs Type Families Template Haskell Concurrent
support Tuple
29.
何が追加されているのか Eff IOを細かく分けて個別に扱える forall e a.
Eff e a == forall a. IO a Record Tupleの代わりか JS側のObjectの表現 Row Polymorphism RecordとEffで活躍
30.
注意点 正格評価 forallが省略出来ない リテラルが多相化してない psciの使い方がghciと違う エラーメッセージ弱い
31.
以下JSer向け説明
32.
JSの問題点 型が弱い 動的型付き言語
33.
要求 強い型がほしい NullとかAnyとか滅ぼしたい 型安全性がほしい
34.
Q. 強い静的型があればそれ でいいのか?
35.
ここでJSの問題領域確認 DOM操作 ネットワーク グラフィックレンダリング UI関連 音声再生 イベントハンドリング
36.
A. JSやばい、柔軟性が必要。
37.
PureScriptと柔軟性 First class functions 高階関数は基本的かつ非常に高い柔軟性を持つ武器 Algebraic
Data Type(ADT) HaxeのEnum、という言い方はどうかと思うけど大 体それ。HaxeはGADTになったけど。 直積型、直和型、再帰型
38.
PureScriptと柔軟性 (con’t) Monad 超強いコンストラクタパターン(前述) 型の表現力が高いほど威力が増す
39.
PureScriptターゲット 任意の規模の開発 複数人によるチームワーク 複雑なロジックの記述
40.
PureScript Pros. Haskellの性質を持っている テスト容易性 QuickCheck is
ready!! 高メンテナンス性 コード再利用性 学習コスト低い(ただしHaskellerに限る) 吐き出すJSコードが小さい JSエコシステムとの親和性
41.
PureScript Cons. Haskellそのものではない superset/subsetどちらでもない Hackageライブラリが使えない Concurrent supportがない(GHCJSはある)
42.
PureScriptと パフォーマンスチューニング
43.
mutable変数について STモナドを使用することで可能。
44.
さらなる最適化 FFIを用いる。
45.
PureScriptとFFI
46.
FFI Foreign Function Interface 他言語を呼び出す仕組み 今はPS、JS間で交互に呼び出す仕組みを指す 言語間の境界を明確に定める ぼんやり決める訳ではない
47.
FFIのコスト PSからJSを呼び出す際、JSのコードにPS側の型を付 ける必要がある FFIの型を適切に記述しないと PS側の型チェックが通らない ランタイムエラー発生
48.
FFIのコストはペイ出来るか コミュニティがFFIライブラリを用意してくれればコス トゼロ FFIのコストと対比すべきコストは? 開発コスト テストコスト メンテナンスコスト
49.
FFIライブラリ戦略
50.
FFIライブラリ戦略 JavaScriptライブラリをPureScriptで使いたいのだが ライブラリの解こうとする問題構造から考える JavaScriptライブラリの構造から考える
51.
ライブラリの解こうとする 問題構造から考える PureScript側で問題を解くために適切なAPIを作成 JS側の構造は無視 PS側で自然に使える ライブラリのアップデート追随が困難
52.
JavaScriptライブラリの構造 から考える JavaScriptライブラリのAPIをそのままPureScriptへ置 き換える ライブラリ追従が楽 PS側使用時に工夫が必要となる可能性 まあMonadでなんとかなる(多分)
53.
FFIライブラリ戦術
54.
JavaScriptから見たPureScript PSの関数(Curried function) JSではNested function forall
e a. Eff e a 引数無しのfunction Methods function PSのRecord JSのObject
55.
PureScriptから見たJavaScript ライブラリ JS Objectの型付け問題 FFIでJS側で処理する Monadで適切に構築する JSのthis問題 thisの値を運ぶ事で対処 foreign import
data Self :: * method :: forall e a. (Self -> Eff e a) -> Eff e a
56.
PureScriptから中身の見えない JavaScriptの値の扱い foreign import data
Self :: * -- Represent `this` JavaScript側で生成した値 JavaScript側で扱う値 PureScript側で見える必要はない しかし運ぶ必要がある
57.
Tips PS側でどうしてもうまく型が付かない場合は、FFI経 由でJS側に押しつけ、JS側でなんとかするという逃 げ方がある JS側の記述は自己責任となるが、それでPS側の型 システムが脅かされる訳ではない FFIはJSに型を付けるという意味合いもある
58.
Try PureScript! http://tryps.functorial.com/
59.
余談1. Monadは構築パターン Comonadは分解パターン、そのうち流行る
60.
余談2. AltCSSもPureScriptでいいのではないか。モナドで構 築。
Jetzt herunterladen