Nix言語
Nix関係の全ての設定やderivationはこのNix Expression Languageで書く
強い動的型付き
拡張子は.nix
変わった仕様が多いので込み入ったことをしようとするとハマるかも知れない(悪い意味で)mrsekut.icon
文法など基本事項
標準関数など
Identifier
-を識別子に使える
a-やa-bという変数を定義できる
packageのnameに-を使うことが多いので便利
Strings
文字列は、"foo"か''foo''のいずれかで書く
'foo'という書き方はできない
''fo"o''のように文字列の内部に"を含めたいときとかに使う
このfooの中身は文字列でないといけない
interpolationをescapeするためには以下のように書く
code:nix
nix-repl> "\${foo}"
"${foo}"
nix-repl> ''test ''${foo} test''
"test ${foo} test"
これは覚えられる気がしないmrsekut.icon
Lists
カンマは不要
[ 2 "foo" true (2+3) ]
immutableである
let..in
;が必要
code:nix
let a = "foo"; in a
let a = 3; b = 4; in a + b
関連
参考
他の関数型言語とは異なる部分のみを取り上げて紹介されている
文法
<hoge>ってなに?
e.g. let localconfig = import <localconfig>;
inherit statement
inheritってなに?
関数じゃなくて構文っぽいが(syntax highligh的に)
できるらしい
慣用表現
scriptのpathを取得
${builtins.toString ./.}
あるdir内の、dir名一覧を取得
path: map (d: ./. + "/${d}") (builtins.attrNames (builtins.readDir path)); ref 型
integer, floating point, string, path, boolean and null
simple types
lists
sets
functions
Functo, Monadなどの型を定義しているrepo
良い感じの関数結合ってないの?
.nix内で$USERみたいに、shell変数使いたい