Halo, Habr! Hari ini kami akan menjelaskan mengapa kami menulis frontend di Haskell dan mengompilasinya ke JavaScript. Secara umum, proses ini disebut transpilasi:
Transpilasi adalah proses mengubah program X menjadi program Y yang setara. Tidak seperti kompilasi, X dan Y kira-kira berada pada tingkat abstraksi yang sama.

Mengapa transpilasi dibutuhkan?
Secara umum, ada dua tujuan utama transpilasi:
- . , , . , , . - "" (deshugaring) . Babel, JS , . , ,
. , Python 2.x Python 3 2to3. - , / . , JS ( ) WASM ( ), , . , , . , , ( ), . , (, SourceMap JS).
:
- -, JS:
— TypeScript — JavaScript , .
— CoffeeScript — JS , Python Haskell.
— Elm — ( Haskell), - , The Elm Architecture (TEA).
— PureScript — Haskell- .
— ClojureScript — Clojure (, , ) - . - :
— Bluespec — , Haskell, Verilog.
— Clash — , Haskell , VHDL, Verilog SystemVerilog.
— Verilator — , Verilog C++ SystemC. - (, 16- Intel 8086 8- Intel 8080).
JS?
, JS. , :
- JS -.
- , , , , ..
- , - , .
- . , - . , . - .
- , , JSON . , , , .
- API . , , , . , API, API , - . , . , API.
- , , . . — "" , . , , .
JS
- :
- .
- Haskell.
- Haskell.
- .
Typeable - Haskell - Reflex (FRP). Haskell JavaScript GHCJS.
TypeScript JS - , , Haskell, .
Reflex Elm PureScript - , . , Reflex - "". Elm Reflex .
JS, :
- , "" .
- : API, -, . , .
-
servant
, API , , , , API ( — ). - JSON, CSV, .. . API .
, :
- JS .
- , . , .
- JS.