Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
The reason for using reason
mzp
July 22, 2017
Technology
2
2.4k
The reason for using reason
https://ml-lang.connpass.com/event/58151/
mzp
July 22, 2017
Tweet
Share
More Decks by mzp
See All by mzp
アイドルとして勤務する -理論と実践- / Work as cute idol. - theory & practice - #imas_hack
mzp
2
17k
日本語入力の落とし穴
mzp
4
13k
アイマスハッカソン 2017-ライブの感動を再現する
mzp
1
1.8k
ぺろぺろ - Github pull request bot framework -
mzp
2
2.5k
Love💕LivePhotos
mzp
0
1.2k
日本語入力とLisp
mzp
1
2.8k
Amazon EC2 スポットインスタンスを開発環境にする話
mzp
0
1.3k
クラウドサービスを活用した開発環境
mzp
1
2.9k
Rubyistのための型入門
mzp
20
5.4k
Other Decks in Technology
See All in Technology
LINEスタンプの実例紹介 小さく始める障害検知・対応・振り返りの 改善プラクティス
line_developers
PRO
3
1.7k
A1A会社紹介資料-2022-05-20
a1a
2
1.1k
Dagu | オンプレ向けワークフローエンジン(WebUI 同梱)
yohamta
0
190
⚡Lightdashを試してみた
k_data_analyst
0
210
ニフティでSRE推進活動を始めて取り組んできたこと
niftycorp
2
510
Embedded SRE at Mercari
tcnksm
0
850
AI Company
shurain
0
230
モダンデータスタックとかの話(データエンジニアのお仕事とは)
foursue
0
430
一人から始めるプロダクトSRE / How to start SRE in a product team, all by yourself
vtryo
4
2.7k
Data Warehouse or Data Lake, which one do I choose?
ahana
0
120
toilを解消した話
asumaywy
0
210
[SRE NEXT 2022]メルカリグループにおけるSREs
srenext
0
280
Featured
See All Featured
Facilitating Awesome Meetings
lara
29
3.9k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
38
12k
Web Components: a chance to create the future
zenorocha
303
40k
Agile that works and the tools we love
rasmusluckow
319
19k
The Power of CSS Pseudo Elements
geoffreycrofte
46
3.9k
Principles of Awesome APIs and How to Build Them.
keavy
113
15k
The Web Native Designer (August 2011)
paulrobertlloyd
74
1.9k
Practical Orchestrator
shlominoach
178
8.6k
Git: the NoSQL Database
bkeepers
PRO
415
59k
Building Flexible Design Systems
yeseniaperezcruz
310
33k
Bash Introduction
62gerente
596
210k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
212
20k
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