Elm (プログラミング言語)


ElmElm[2]
Elm
Elm
Elmのロゴ
パラダイム 関数型プログラミング、リアクティブプログラミング、純粋関数型言語、関数型リアクティブプログラミング ウィキデータを編集
登場時期 2012年 (12年前) (2012)
設計者 Evan Czaplicki
最新リリース 0.19.1/ 2019年10月21日 (4年前) (2019-10-21)
型付け 静的型付け強い型付け型推論
影響を受けた言語 HaskellStandard MLOCamlF Sharp ウィキデータを編集
ライセンス 修正BSDライセンス[1]
ウェブサイト elm-lang.org ウィキデータを編集
拡張子 .elm
テンプレートを表示

歴史

編集

Elm2012Evan Czaplicki[3]Elm[4]Evan CzaplickiElm2013Prezi[5]2016NoRedInkElm[6]

ElmHTMLCSSJavaScript[7]REPL[8][9][10]MacWindows[11]Elm[12]

特徴

編集

Elmifletcase[13][14]HTMLCSSJavaScript

不変性

編集

Elmのすべての値はイミュータブルであり、一度作られた値に対して後から変更が加えることはできない。

Elmは永続データ構造を用いてArrayDictSetライブラリを実装している[15]

静的型

編集

Elm





[16]

Elm 

モジュールシステム

編集

Elmはモジュールシステムを持っており、ユーザーはコードをモジュールと呼ばれる小さな単位に分割することができる。ユーザーは値をインポート・エクスポートすることができ、実装の詳細を他のプログラマが意識する必要のないように隠蔽することができる。モジュールはElmコミュニティライブラリの基礎になっている。

HTML、CSS、JavaScriptとの相互運用

編集

ElmJavaScript調[17]ElmJavaScript

Elmelm/htmlElmHTMLCSS[18]Virtual DOM使[19]

制限

編集

HaskellPureScriptElm[20]mapapplyfoldfilterList.map Dict.map 使

ツール

編集

サンプルコード

編集
-- 1行コメント

{- 複数行コメント
   It can span multiple lines.
-}

{- 複数行コメントは {- ネスト -} することができる -}

-- ''greeting'' という値を定義している。型は String と推論される。
greeting =
    "Hello World!"

-- トップレベルの宣言には型注釈をつけた方が良い
hello : String
hello =
    "Hi there."

-- 関数も同じように宣言される。引数は関数名の後ろに書く。
add x y =
    x + y

-- やはり型注釈をつけたほうが良い
hypotenuse : Float -> Float -> Float
hypotenuse a b =
    sqrt (a^2 + b^2)

-- 関数はカリー化されている。ここでは掛け算の中置演算子を2で部分適用している。
multiplyBy2 : number -> number
multiplyBy2 =
    (*) 2

-- 条件分岐にはif式を使う
absoluteValue : number -> number
absoluteValue number =
    if number < 0 then negate number else number

-- 名前つきのフィールドを保持するにはレコードを使う
book : { title : String, author : String, pages : Int }
book =
    { title = "Steppenwolf"
    , author = "Hesse"
    , pages = 237 
    }

-- `.`でレコードの値にアクセスする
title : String
title =
    book.title

-- `.`でのレコードのアクセスは関数として使うことも出来る
author : String
author =
    .author book

-- 新しい型を定義するには`type`キーワードを使う
-- 次の型は2分木を表している
type Tree a
    = Empty
    | Node a (Tree a) (Tree a)

-- これらの型はcase式によって分岐することができる
depth : Tree a -> Int
depth tree =
    case tree of
        Empty ->
            0

        Node value left right ->
            1 + max (depth left) (depth right)

脚注

編集


(一)^ LICENSE. 2019321

(二)^ Elm home page. 2017517

(三)^ Elm: Concurrent FRP for Functional GUIs

(四)^ Elm's Online Editor

(五)^ Elm joins Prezi

(六)^ New Adventures for Elm

(七)^ Elm compiler source code

(八)^ Elm REPL announcement

(九)^ Elm Package Manager announcement

(十)^ Elm's Time-Traveling Debugger

(11)^ Elm Platform

(12)^ Elm Packages

(13)^ The Syntax of Elm

(14)^ About Elm Elm features

(15)^ Elm Standard Libraries

(16)^ Model The Problem. Elm. 201654

(17)^ Ports

(18)^ documentation

(19)^ Blazing Fast Html

(20)^ Higher-Kinded types Not Expressible? #396. github.com/elm-lang/elm-compiler. 201536

外部リンク

編集