【学生無料※】ICFP(国際関数型言語学会)@奈良でチュートリアルに出よう！

###### ※[学生ボランティア](http://conf.researchr.org/attending/icfp-2016/Student+Volunteers)に応募し、採用されれば、参加費免除、昼食とバンケット代もカバーされます。7月31日〆切。

関数型言語が勉強したい・・・でもなかなか勉強の機会がない。
参加したい勉強会がない。
すでに勉強しているが、どうもしっくり来ない。さらに上を目指したい。

関数型言語が好き。関数型言語を学びたい。そんな皆様すべてに超絶オススメのイベントが、日本にやってきます！

# CUFP Tutorialとは？

国際関数型言語学会、[The International Conference on Functional Programming(ICFP)](http://conf.researchr.org/home/icfp-2016)。
その名の通り、関数型言語を扱う最高峰の学会の１つです。そのICFPが、2011年東京に続き、2016年、二度目の日本会場で開催されます。

日程は9月18日から24日、会場は[奈良春日野国際フォーラム](http://conf.researchr.org/venue/icfp-2016/NKIF)。

Commercial Uses of Functional Programming (CUFP)は、ICFPの併設イベントで、関数型言語を利用している企業や、教育している組織など、関数型言語の応用に重点を置いたワークショップです。
彼らの中には、関数型言語を広めたい！と思っているひとも多いわけです。
そんな中、CUFPチュートリアルは、関数型言語や、そのツール・ライブラリ・理論について、一人のチューター対少人数の生徒を一室に集め、3時間半かけてみっちり教えてもらえるイベントです。

チュートリアルは、9月22日・23日の二日間。８つのコースが2部屋にわけて開催され、自分の受けたいコースを[ICFPの登録](http://conf.researchr.org/attending/icfp-2016/Registration)経由で事前登録し自由に参加することができます。

詳しい、正確な内容は[公式情報](http://cufp.org/2016/)を参照いただくことにして、ここではわたくし村主が、各チュートリアルの内容を抄訳してご紹介させていただきます。

##  Teaching Functional Programming
9月22日 午前9:00 - 12:30
講師：Michael Sperberさん

関数型プログラミングを誰かに教えたいと思ったことはありませんか？
Haskell, OCaml, Erlang, Clojure, Scala, F#, Racket または Schemeを熱愛していて、誰かに伝えたいと思ったことは？でも、これらの言語は開発環境としてはすぐれていても、必ずしも初心者向けに関数型言語を教えるのに最適なツールとは言えません。
このチュートリアルでは、DrRacket http://racket-lang.org/ を題材に、Program by Design Approachという、関数型プログラミングの効率的な考え方を説明します。
このチュートリアルを受ければ、関数型言語を教えるための効果的なアプローチが身につき、いくつかの落とし穴の避け方もわかるようになるでしょう。すべての関数型プログラマにおすすめです。

http://cufp.org/2016/t1-michael-sperber-teaching-functional-programming.html

## Extensible Effects: understanding them, implementing them, using them
9月22日 午前9:00 - 12:30
講師：Oleg Kiselyovさん 日本語話せる人です :jp: 

このチュートリアルでは、プログラムの副作用を、プログラムとハンドラの相互作用としてモデル化し、純粋関数で扱えるようにする *Effect* について学びます。普通のモナドと比べると、Effectのほうが容易に拡張でき、様々なEffectを使う部分を一つのプログラムとして合成しやすいのです。EffectはHaskell(モナド変換子とは別です), Scala, Idris(ネイティブサポート), OCaml(もうすぐ入る), PureScript(Effectを基礎とする言語), Eff(同じく)に取り入れられています。

このチュートリアルはみなさんに参加してもらい、問題を解いたり質疑応答をしながら進めたいと思っています。
このチュートリアルを受ければ、Effectが理解でき、自分でEffectを作れるようになります。チュートリアルはHaskellで進めますが、ScalaやOCamlなど他の関数型言語にも適応できる基本的な要素しか使いません。
Haskell, MLなどの高階関数型言語の基本知識を必要としますが、関数型言語のユーザー・研究者・学生など様々な人におすすめです。

http://cufp.org/2016/t2-oleg-kiselyov-extensible-effects-understanding-them-implementing-them-using-them.html

## Introduction to OCaml
9月22日 午後1:30 - 5:00
講師：“KC” Sivaramakrishnanさん

OCamlのチュートリアルです。まずはWebブラウザ上で走るOCaml処理系を使って基本を学んだあと、ゲームを作りながらOCamlを学びます。何かプログラミングしたことのある人におすすめです。OCamlの前提知識は必要ありません。

http://cufp.org/2016/t3-kc-sivaramakrishnan-introduction-to-ocaml.html

## An Introduction to to Type-Level and Generic Programming in Haskell
9月22日 午後1:30 - 5:00
講師：Andres Löhさん

Haskellのウリのひとつの`deriving`。自作の型に対し自動的に比較や、文字列化やパーサが実装できて便利ですよね。でも、自作の型クラスを`deriving`するなど、一般的な型にたいしてその構造を認識して何かをする関数って、どうやって書けばいいのでしょう？
このチュートリアルでは、`generics-sop`ライブラリを使いながら、そのような事を実現できるHaskellでのジェネリックプログラミングを学び、それを通じて、GADTsやDataKindsといったGHCの型システム拡張を学びます。Haskellの基本機能に対する確固たる理解があり、型レベルプログラミングについてより深く学びたいと思っている中級または上級のHaskellプログラマが対象です。ってなにそれこわい :innocent: 。型システム拡張の前提知識は必要ありません。

http://cufp.org/2016/t4-andres-loh-generic-programming.html

## Fable, an F# to JavaScript compiler
9月23日 午前9:00 - 12:30
講師：Alfonso García-Caroさん

強力な関数型言語F#のフル機能がJavaScriptにコンパイルできるFableというコンパイラについて学びます。 http://fsprojects.github.io/Fable/
Fableはコンパクトで(約300KB)、最新ES6に準拠したJSを生成するので、Babel, Webpack, React Hot Loaderといった他のJS開発ツールと互換性があり、また、サーバーサイドJS、デスクトップアプリ開発ツールのGithub Electron、モバイルアプリの Fuse, ReactなどJSのエコシステムともうまくはまります。
このチュートリアルを受ければ、F#で基本的なWebアプリ、デスクトップアプリ、モバイルアプリが作れるようになります。
受講者の意向を聞いて、チュートリアルをどれに集中するか決めようとおもいます。F# の事前知識は必要ありませんが、事前に[環境のインストールが必要](http://cufp.org/2016/t5-alfonso-garcia-caro-intro-to-fable.html)です。

http://cufp.org/2016/t5-alfonso-garcia-caro-intro-to-fable.html

## LiquidHaskell: Verification of Haskell Programs with SMTs

9月23日 午前9:00 - 12:30
講師：Niki Vazouさん

Haskellプログラムの形式証明機、LiquidHaskellについて学びます。LiquidHaskellはHaskellの型システムと融合していて、証明は自動。
関数の完全性、終了性、メモリ安全性、リソース漏れのNASAなどが証明でき、
10000行以上もある実用Haskellプログラムで使われています。Haskellの基本知識がある人、静的証明のファンにはぜひおすすめです。
チュートリアルはオンラインで行いますので、とくに準備は必要ありません。

http://cufp.org/2016/t6-niki-vazou-liquid-haskell-intro.html

## PureScript Front-end Developement
9月23日 午後1:30 - 5:00
講師：Brian McKennaさん

このチュートリアルではPureScript という、 JavaScriptへコンパイルされる、コンパクトな、型付の関数型言語について学びます。このチュートリアルを学べば、PureScriptでWebアプリが書けるようになり、PureScriptアプリケーションまわりのツールや、FFI経由でJavaScriptを呼び出す方法もわかります。
なんらかの関数型言語の経験がある方におすすめです。どうしてフロントエンドが純粋関数で書けるのか興味がある方には、お役に立てるでしょう。

http://cufp.org/2016/t7-brian-mckenna-purescript.html

## Transforming data into GUI: a new style graphical user interface library for Haskell
9月23日 午後1:30 - 5:00
講師：木下郁章さん 日本人です。

Haskellプログラミングは広く使われていますが、GUIをプログラムするのは面倒だと感じたことはありませんか？既存のGUIライブラリへのバインディングはいくつかありますが、Haskellのプログラミングスタイルと合わなかったり、インストールが面倒だったり。

ここで紹介する`jugendstil`は、クロスプラットフォームに使える、Haskellのみで書かれた新しいスタイルのGUIライブラリです。
データからGUIコンポーネントへの関数を書くだけでGUIプログラミングができる、再利用性の高い表現法を採用しています。
また、状態管理手法を特定のライブラリ(Functional Reactive Programmingとか)に縛られることもありません。
このチュートリアルを受ければ、シンプルなデータ可視化アプリケーションを作りながら、Haskellでの状態管理技法をいくつか学ぶことができます。
[lens](https://hackage.haskell.org/package/lens)をさわったことがあるHaskellユーザーにおすすめです。

http://cufp.org/2016/t8-fumiaki-kinoshita-gui-development-in-haskell.html

# 参加登録

登録はこちら http://conf.researchr.org/attending/icfp-2016/Registration です。

うん、有料なんだ。すまない。

Thursday (Sep. 22)、Friday (Sep. 23)を含む登録をして下さい。8月17日までが早期登録価格で、ACMまたはSIGPLANの会員の方は一日＄150、そうでない方は ＄200です。
SIGPLANの会員権が＄25で売っているので、会員になった上で会員価格で参加したほうがオトクです。8月17日を過ぎても、現地受付でも参加は可能です。

登録画面に行って入力をすすめていくと、途中で以下のような選択肢が出ますので、ここで好みのチュートリアルを選択すれば登録完了です。

![register.png](https://qiita-image-store.s3.amazonaws.com/0/1871/7b1fbfff-1326-0298-93cc-163aa59e4bf6.png)



## 英語力が不安 :uk: :us: 

逆に考えるんだ。

関数型言語学会(ICFP)は通常、海外で開催されます。英語が苦手な貴方が、ICFPやCUFPチュートリアルに参加しようと思ったら、国際線に乗って国際空港で乗り継ぎながら会場に辿り着き、さらに海外で数日を生き延びねばなりません。
宿でもお店でも日本語が自由に通じるICFPは滅多にありませんよ？

英語力が不安な方は[CUFPチュートリアル　登録へ！](http://conf.researchr.org/attending/icfp-2016/Registration)

## 資金面が不安 :yen: :money_with_wings: 

逆に考えるんだ。

関数型言語学会(ICFP)は通常、海外で開催されます。参加しようとすれば海外旅行並みの費用がかかります。国内だけの移動で、ひょっとすると親戚や友人の家に泊まれたり、自宅から通勤できちゃうICFPは滅多にありませんよ？

しかも学生の方 :point_up::exclamation: **[学生ボランティア](http://conf.researchr.org/attending/icfp-2016/Student+Volunteers)に応募し採用されれば参加費免除、昼食とバンケットも無料** でついてきます。学生ボランティアの〆切は7月31日までです。

ぜひ、 [学生ボランティア](http://conf.researchr.org/attending/icfp-2016/Student+Volunteers)に応募の上、[CUFPチュートリアル　登録へ！](http://conf.researchr.org/attending/icfp-2016/Registration)


## レベルが高すぎそうでついていけるか不安 :chart_with_upwards_trend: 

逆に考えるんだ。

世の中には、失礼ながら、えてして中途半端にわかったつもりの人による分かったようなわからないようなチュートリアル記事が溢れているのではないでしょうか。私自身も自戒をこめて書いております :sweat_smile: 
一流のチューターに教えてもらえるからこそ、かえってスパッとわかる、ってことがあるかもしれませんよ！

事前に :elephant: [すごいHaskell 楽しく学ぼう](http://amzn.to/2a2Dwd7) :sushi: などの参考書を読んで知識をつけておくのもよいですね :grin: 

関数型言語力が不安な方は[CUFPチュートリアル　登録へ！](http://conf.researchr.org/attending/icfp-2016/Registration)

# 他のおすすめICFPイベント
ICFPには、他にも各関数言語ごとや、理論・実装などテーマに特化したワークショップがたくさん併設されています。[ICFP2016公式サイト](http://conf.researchr.org/home/icfp-2016)からチェックしてみてください。ここでは、チュートリアルに参加しようかな？という皆さんに特におすすめのイベントをご紹介します。

## Programming Languages Mentoring Workshop (PLMW)

学部生・院生をターゲットに、プログラミング言語のさまざまな分野の専門家による入門的なトークを集めたワークショップです。[今年のプログラムはこちら](http://conf.researchr.org/track/PLMW-ICFP-2016/PLMW-ICFP-2016#event-overview)。操作的意味論や型理論の基礎のレクチャーのほか、「読みやすい論文の書き方」「伝わる研究発表のやり方」なんてトークもあるようです。

## Student Research Competition
http://conf.researchr.org/info/icfp-2016/student-research-competition
学生のみなさん！ご自身の研究をICFPでポスター発表するチャンスです。〆切は８月３日です。


# おわりに

私は2011年の東京会場で初参加して以来、ICFPの魅力の虜になり、毎年欠かさず参加しています。
関数型言語はただでさえ勉強するのが大変なのに、毎年こちらのキャパをかるく上回る理論、技術、新しい可能性が登場し、興奮と熱狂と絶望の一週間を過ごすことになります。
もちろん国際学会ですから、関数型言語界隈の大御所や起業家が普通に歩いていますので、仲良くなれます。
東京につづく二度目の日本会場で敷居が下がったところで、一度行ったらやめられないICFP中毒者になりはててみませんか :syringe: :yum: 

[ICFP / CUFPチュートリアル　登録へ！](http://conf.researchr.org/attending/icfp-2016/Registration)