Builtins
This section contains the proof that all nix builtins
can be meaningfully and correctly annotated with the proposed type system.
There are currently 89 builtin functions, that can be discovered with
run
nix __dump-builtins
Every builtins signature can be found below (sorted alphabetically)
Following symbols are used below
- ✅ - Compliant
- ⚠️ - Under construction.
Builtins - TODO: The type signatures are not compliant yet
abort ⚠️
String -> Error
add ✅
Number -> Number -> Number
all ✅
(a -> Bool) -> [a] -> Bool
any ✅
(a -> Bool) -> [a] -> Bool
attrNames ✅
{ ${key} :: a } -> [String]
attrValues ✅
{ ${key} :: a } -> [a]
baseNameOf ✅
( String | Path ) -> String
bitAnd ✅
Int -> Int -> Int
bitOr ✅
Int -> Int -> Int
bitXor ✅
Int -> Int -> Int
break ✅
a -> a
catAttrs ✅
String -> [ { ${name} :: a } ] -> [a]
ceil ✅
Number -> Int
compareVersions ✅
String -> String -> (-1 | 0 | 1)
concatLists ✅
[ [ a ] ] -> [ a ]
concatMap ✅
( a -> [ b ] ) -> [ a ] -> [ b ]
concatStringsSep ✅
String -> [ ( String | Path ) ] -> String
deepSeq ✅
a -> b -> b
dirOf ✅
a = (Path | String)
a -> a
div ⚠️
Number -> Number -> Number
elem ⚠️
a -> [b] -> Bool
elemAt ⚠️
[a] -> Int -> b
fetchClosure ⚠️
AttrSet -> AttrSet
fetchGit ⚠️
AttrSet -> AttrSet
fetchTarball ⚠️
AttrSet -> AttrSet
fetchurl ⚠️
String -> AttrSet
filter ⚠️
(a -> Bool) -> [a] -> [b]
filterSource ⚠️
(Path -> String -> Bool) -> Path -> Path
floor ⚠️
Float -> Int
foldl' ⚠️
(a -> b -> c) -> a -> [b] -> c
fromJSON ⚠️
String -> a
functionArgs ⚠️
(a) -> AttrSet
genList ⚠️
(a -> b) -> a -> [b]
genericClosure ⚠️
AttrSet -> [AttrSet]
getAttr ⚠️
String -> AttrSet -> a
getEnv ⚠️
String -> String
getFlake ⚠️
AttrSet -> AttrSet
groupBy ⚠️
(a -> b) -> [a] -> AttrSet
hasAttr ⚠️
String -> AttrSet -> Bool
hashFile ⚠️
String -> Path -> String
hashString ⚠️
String -> String -> String
head ⚠️
[a] -> a
import ⚠️
Path -> a
intersectAttrs ⚠️
AttrSet -> AttrSet -> AttrSet
isAttrs ⚠️
a -> Bool
isBool ⚠️
a -> Bool
isFloat ⚠️
a -> Bool
isFunction ⚠️
a -> Bool
isInt ⚠️
a -> Bool
isList ⚠️
a -> Bool
isNull ⚠️
a -> Bool
isPath ⚠️
a -> Bool
isString ⚠️
a -> Bool
length ⚠️
[a] -> Int
lessThan ⚠️
Number -> Number -> Bool
listToAttrs ⚠️
[{name :: String, value :: a}] -> AttrSet
map ⚠️
(a -> b) -> [a] -> [b]
mapAttrs ⚠️
(a -> b -> c) -> AttrSet -> AttrSet
match ⚠️
String -> String -> ( Null | [ String ] )
mul ⚠️
Number -> Number -> Number
parseDrvName ⚠️
String -> AttrSet
partition ⚠️
(a -> Bool) -> [a] -> AttrSet
Path ⚠️
AttrSet -> StorePath
pathExists ⚠️
Path -> Bool
placeholder ⚠️
String -> String
readDir ⚠️
Path -> AttrSet
readFile ⚠️
Path -> String
removeAttrs ⚠️
AttrSet -> [a] -> AttrSet
replaceStrings ⚠️
[String] -> [String] -> String -> String
seq ✅
a -> b -> b
sort ✅
(a -> a -> Bool) -> [a] -> [a]
split ⚠️
String -> String -> [String]
splitVersion ⚠️
String -> [String]
StorePath ⚠️
StorePath -> StorePath
stringLength ⚠️
String -> Int
sub ⚠️
Number -> Number -> Number
substring ⚠️
Int -> Int -> String -> String
tail ⚠️
[a] -> a
throw ⚠️
String
toFile ⚠️
Path -> String -> StorePath
toJSON ⚠️
a -> String
toPath ⚠️
String -> Path
toString ⚠️
a -> String
toXML ⚠️
a -> String
trace ⚠️
a -> b -> b
traceVerbose ⚠️
a -> b -> b
tryEval ⚠️
a -> a
typeOf ✅
a -> "bool" | "int" | "float" | "string" | "set" | "list" | "path" | "null" | "lambda"
zipAttrsWith ⚠️
(String -> [a] ) -> [a] -> AttrSet