Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The reason for using reason
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
mzp
July 22, 2017
Technology
3k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The reason for using reason
https://ml-lang.connpass.com/event/58151/
mzp
July 22, 2017
More Decks by mzp
See All by mzp
アイドルとして勤務する -理論と実践- / Work as cute idol. - theory & practice - #imas_hack
mzp
2
18k
日本語入力の落とし穴
mzp
4
14k
アイマスハッカソン 2017-ライブの感動を再現する
mzp
1
2.5k
ぺろぺろ - Github pull request bot framework -
mzp
2
3.3k
Love💕LivePhotos
mzp
0
1.5k
日本語入力とLisp
mzp
1
3.6k
Amazon EC2 スポットインスタンスを開発環境にする話
mzp
0
1.6k
クラウドサービスを活用した開発環境
mzp
1
3.3k
Rubyistのための型入門
mzp
19
6.2k
Other Decks in Technology
See All in Technology
螺旋型キャリアの生存戦略 / kinoko-conf2026
rakus_dev
1
940
【2026年版】 ベクトル検索とEmbedding最前線
mocobeta
23
7.5k
AI時代のコスト管理を考えよう〜明日から使える実践AWSノウハウ~
yoshimi0227
0
860
レガシーな広告配信システムでのAI駆動開発/運用の挑戦
i16fujimoto
0
120
自分が詳しくない領域でAIを使う #プロヒス2026
konifar
20
7.4k
Bucharest Tech Week 2026 - Guardians of the Cloud-Native Galaxy
edeandrea
PRO
0
140
SONiC Scale-Up Working Group から探る Scale-UpやUltraEthernet機能の実装方法
ebiken
PRO
2
480
4人目のSREはAgent
tanimuyk
0
130
Agile and AI Redmine Japan 2026
hiranabe
4
470
AIAU_UMEMOGU_ninomiya_slide
ninomiya_ii
0
260
Zenoh on Zephyr on LiteX
takasehideki
2
110
AIチャットの改善から見えた、良いAI体験とは / What Constitutes a Good AI Experience: Insights from Improving AI Chat
kubode
0
120
Featured
See All Featured
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.3k
Ethics towards AI in product and experience design
skipperchong
2
310
Color Theory Basics | Prateek | Gurzu
gurzu
0
370
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.6k
Code Review Best Practice
trishagee
74
20k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
Docker and Python
trallard
47
3.9k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
430
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
870
Building an army of robots
kneath
306
46k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
170
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Transcript
5IFSFBTPOGPSVTJOHSFBTPO N[Q .-ษڧձ
ཁ .PEFSO+BWB4DSJQU❤.-GFBUVSFT Ͱಋೖେม 0$BNMΛ+BWB4DSJQUͬΆ͘͠Α͏
None
Ҿ༻ݩ3*05"3FBDUMJLFVTFSJOUFSGBDFNJDSPMJCSBSZ IUUQNJLFXBSEOFUUBMLSJPUKT
None
class Greeting extends React.Component { render() { return <h1>Hello</h1>; }
} 3FBDUWJFXͷߏங
3FEVYঢ়ଶཧ ભҠؔΛఆٛ͠ঢ়ଶΛཧ͢Δ ͜ͷؔΛSFEVDFSΛݺͿ state -> action -> state
function counter(state = 0, action) { switch (action.type) { case
'INCREMENT': return state + 1 case 'DECREMENT': return state - 1 default: return state } } ྫDPVOUFSSFEVDFS { type: "INCREMENTAL" }
function todo(state, action) { switch (action.type) { case 'TOGGLE': if(state.id
== action.id) { return {...state , completed: !state.completed } } else { return state } default: return state } } ྫUPEPSFEVDFS { type: 'TOGGLE', id: 42 } { id: 42, name: "create slide", completed: false, ... }
SFEVDFSJEJPN UZQF͕Yͷͱ͖ɺZͱ͍͏߲Λ࣋ͭ ঢ়ଶΛίϐʔ͠ɺҰ෦͚ͩߋ৽͢Δ ˠόϦΞϯτܕͬΆ͍ ˠϨίʔυܕͬΆ͍
.-༝དྷͷػೳͷಋೖ ύλʔϯϚον .BZCFϞφυ ඇಉظϞφυ ੩తܕݕࠪ
+ 2016 Ҿ༻ݩ5IF%BXOPG3FBTPO IUUQTTBOEFSTQJFTHJUIVCJPTMJEFTEBXOPGSFBTPOQEG
✨ཧͷݴޠ✨ όϦΞϯτϨίʔυܕ͕͋Δ ύλʔϯϚον͕͋Δ ੩తܕݕ͕ࠪ͋Δ +BWB4DSJQU͕ੜͰ͖Δ
JS developer trying to grasp OCaml syntax Ҿ༻ݩ5IF%BXOPG3FBTPO IUUQTTBOEFSTQJFTHJUIVCJPTMJEFTEBXOPGSFBTPOQEG
JavaScript OCaml Flow Reason Adopting features of ML Becoming familiar
to JS developers Syntax + tooling A lot of work Ҿ༻ݩ5IF%BXOPG3FBTPO IUUQTTBOEFSTQJFTHJUIVCJPTMJEFTEBXOPGSFBTPOQEG
3FBTPO͕ͬͯΔ͜ͱ
#VDLMF4DSJQUͱͷ࿈ܞ 0$BNM͔Β+BWB4DSJQUΛੜ͢ΔίϯύΠϥ IUUQHJUIVCDPNCMPPNCFSHCVDLMFTDSJQU function fact(n) { if (n !== 0)
{ return imul(n, fact(n - 1 | 0)); } else { return 1; } } let rec fact = function | 0 -> 1 | n -> n * fact (n - 1) 0$BNM +BWB4DSJQU
'use strict'; var Pervasives = require("bs-platform/lib/js/pervasives"); var Http = require("http");
var hostname = "127.0.0.1"; function create_server(http) { var server = http.createServer(function (_, resp) { resp.statusCode = 200; resp.setHeader("Content-Type", "text/plain"); return resp.end("Hello world\n"); }); return server.listen(3000, hostname, function () { console.log("Server running at http://" + (hostname + (":" + (Pervasives.string_of_int(3000) + "/")))); return /* () */0; }); } create_server(Http); IVNBOSFBEBCMFDPEF
Ҿ༻ݩ0$BNM+BWBTDSJQU IUUQTHJUIVCDPN#VDLMF4DSJQUCVDLMFTDSJQUCMPCNBTUFSEPDTTMJEFT#VDLMF@NFFUVQNE
let greeting = "hello!"; let name = "mzp"; ..... จ๏มଋറ
if (showMenu) { displayMenu (); }; จ๏݅ذ
switch data { | GoodResult theMessage => "Success! " ^
theMessage | BadResult errorCode => "Something's wrong. The error code is: " ^ (string_of_int errorCode) }; จ๏ύλʔϯϚον
ύοέʔδϚωʔδϟʔ OQNΛར༻͢Δ PQBNΘͳ͍ OQNJOTUBMMCTQMBUGPSNͰ0$BNMͷϏ ϧυ͕࢝·Δ
ίʔυิNFSMJO
ΤσΟλ֦ு
#FUUFS&SSPST Ҿ༻ݩIUUQTHJUIVCDPNSFBTPONM#FUUFS&SSPST
SFE Ҿ༻ݩIUUQTHJUIVCDPNSFBTPONMSFE
༨ஊ3FBTPOͱ͍͏໊લ ؔ࿈ϓϩμΫτ͕શ෦Ұൠ໊ࢺ qPX JOGFS SFBTPO FYBNQMFʹSFBTPOPGMJGF͕͋Δ
3FBTPOͷར༻ྫ
IUUQTUXJUUFSDPNMPZPMOZTUBUVT 'BDFCPPL.FTTBOHFSͷ 3FBTPOʹஔ͖͑ΒΕͯΔ
Meanwhile at… Concurrent React Prototype in OCaml @jordwalke Ҿ༻ݩ5IF%BXOPG3FBTPO IUUQTTBOEFSTQJFTHJUIVCJPTMJEFTEBXOPGSFBTPOQEG
None
3FBTPOͷΑ͍໘
let redux state = function | `Toggle id -> if
state.id = id then { state with complete=not state.complete } else state | _ -> state ύλʔϯϚον࠷ߴ
Ϗϧυ
let maybeSay (s: string Js.null) = Js.Null.iter s (fun message
-> Js.log message) let maybeSay (s: string Js.undefined) = Js.Undefined.iter s (fun message -> Js.log message) OVMMVOEFpOFE
take_if context ~f:(function `DelayedInc -> Some () | _ ->
None) >>= (fun () -> call (delay 1000)) >>= (fun () -> put context `Inc) DBMMCBDLIFMM
3FBTPOͷͭΒ͍໘
Πϯετʔϧ࣌ؒͷ૿Ճ
external request : config -> response Js.Promise.t = "get" [@@bs.module
"axios"]; external get : string -> config Js.null -> response Js.Promise.t = "get" [@@bs.module "axios"]; external delete: string -> config Js.null -> response Js.Promise.t = "delete" [@@bs.module "axios"]; external head: string -> config Js.null -> response Js.Promise.t = "head" [@@bs.module "axios"]; external post: string -> 'a Js.null -> config Js.null -> response Js.Promise.t = "post" [@@bs.module "axios"]; external put: string -> config Js.null -> response Js.Promise.t = "put" [@@bs.module "axios"]; external patch: string -> config Js.null -> response Js.Promise.t = "patch" [@@bs.module "axios"]; ܕఆ͕ٛେม
let expect_array json = switch (Js.Json.reifyType json) { | Js.Json.Array,
data -> swtich (Js.Json.reifyType data) { ... } | _ -> failwith "unexpected response type" } +40/͔ΒͷσʔλऔΓग़͠
type tree = | Leaf | Node of int *
tree * tree (* Leaf --> 0 *) (* Node(a,b,c) --> [a,b,c]*) όϦΞϯτͷϥϯλΠϜදݱ
Α͘Θ͔ͬͯͳ͍෦
WJNͷϋΠϥΠτ ΩʔϫʔυͷϋΠϥΠτ͕ෆશ ????
+4$BNM Ҿ༻ݩIUUQTHJUIVCDPNGBDFCPPLFYQFSJNFOUBM+4$BNM
FTZ ZBSOͷGPSL μϯϩʔυͱϏϧυ͕۠ผ͞Ε͍ͯΔ
PQBNϒϦοδ
ࢀߟจݙ BXFTPNFSFBTPO IUUQTHJUIVCDPNWSBNBOBBXFTPNFSFBTPONMCMPCNBTUFS3&"%.&NE %BXOPG3FBTPO IUUQTTBOEFSTQJFTHJUIVCJPTMJEFTEBXOPGSFBTPOQEG 3FBTPOHVJEF IUUQTSFBTPONMHJUIVCJPHVJEF
#VDLMF4DSJQUNBOVBM IUUQCVDLMFTDSJQUHJUIVCJPCVDLMFTDSJQU.BOVBMIUNM
·ͱΊ +BWB4DSJQUʹ.-ͷػೳ͕ඞཁ ಋೖେมͩ͠ɺ0$BNMͬͨ΄͏͕ ͍͍ ͦͷ··ͭΒ͍ͷͰ͍ͨ͘͢͠ͷ ͕3FBTPO
None