diff options
Diffstat (limited to 'nix.html.markdown')
| -rw-r--r-- | nix.html.markdown | 45 | 
1 files changed, 34 insertions, 11 deletions
| diff --git a/nix.html.markdown b/nix.html.markdown index ef59a135..dde5dbec 100644 --- a/nix.html.markdown +++ b/nix.html.markdown @@ -3,6 +3,8 @@ language: nix  filename: learn.nix  contributors:      - ["Chris Martin", "http://chris-martin.org/"] +    - ["Rommel Martinez", "https://ebzzry.io"] +    - ["Javier Candeira", "https://candeira.com/"]  ---  Nix is a simple functional language developed for the @@ -11,7 +13,7 @@ Nix is a simple functional language developed for the  You can evaluate Nix expressions using  [nix-instantiate](https://nixos.org/nix/manual/#sec-nix-instantiate) -or [`nix-repl`](https://github.com/edolstra/nix-repl). +or [`nix repl`](https://nixos.org/nix/manual/#ssec-relnotes-2.0).  ```  with builtins; [ @@ -38,18 +40,26 @@ with builtins; [    #=> "a" -  #  Integers +  #  Integers and Floats    #========================================= -  # Integers are the only numeric type. +  # There are two numeric types: integers and floats    1 0 42 (-3)       # Some integers +  123.43 .27e13     # A couple of floats + +  # Operations will preserve numeric type +    (4 + 6 + 12 - 2)  # Addition    #=> 20 +  (4 - 2.5) +  #=> 1.5    (7 / 2)           # Division    #=> 3 +  (7 / 2.0) +  #=> 3.5    #  Strings @@ -208,6 +218,12 @@ with builtins; [    { a = 1; b = 2; }.a    #=> 1 +  # The ? operator tests whether a key is present in a set. +  ({ a = 1; b = 2; } ? a) +  #=> true +  ({ a = 1; b = 2; } ? c) +  #=> false +    # The // operator merges two sets.    ({ a = 1; } // { b = 2; })    #=> { a = 1; b = 2; } @@ -231,13 +247,20 @@ with builtins; [    }.a.c    #=> { d = 2; e = 3; } -  # An attribute's descendants cannot be assigned in this -  # way if the attribute itself has been directly assigned. +  # Sets are immutable, so you can't redefine an attribute: +  { +    a = { b = 1; }; +    a.b = 2; +  } +  #=> attribute 'a.b' at (string):3:5 already defined at (string):2:11 + +  # However, an attribute's set members can also be defined piecewise +  # way even if the attribute itself has been directly assigned.    {      a = { b = 1; };      a.c = 2;    } -  #=> error: attribute ‘a’ already defined +  #=> { a = { b = 1; c = 2; }; }    #  With @@ -256,7 +279,7 @@ with builtins; [    #=> 7    # This first line of tutorial starts with "with builtins;" -  # because builtins is a set the contains all of the built-in +  # because builtins is a set that contains all of the built-in    # functions (length, head, tail, filter, etc.). This saves    # us from having to write, for example, "builtins.length"    # instead of just "length". @@ -314,8 +337,8 @@ with builtins; [    #=========================================    # Because repeatability of builds is critical to the Nix package -  # manager, in which, functional purity is emphasized in the Nix -  # language. But there are a few impurities. +  # manager, functional purity is emphasized in the Nix language +  # used to describe Nix packages. But there are a few impurities.    # You can refer to environment variables.    (getEnv "HOME") @@ -350,5 +373,5 @@ with builtins; [  * [James Fisher - Nix by example - Part 1: The Nix expression language]    (https://medium.com/@MrJamesFisher/nix-by-example-a0063a1a4c55) -* [Susan Potter - Nix Cookbook - Nix By Example] -  (http://funops.co/nix-cookbook/nix-by-example/) +* [Rommel Martinez - A Gentle Introduction to the Nix Family] +  (https://ebzzry.io/en/nix/#nix) | 
