minor progress around code source
This commit is contained in:
parent
775d4d616f
commit
e7015adbb0
7 changed files with 69 additions and 26 deletions
|
@ -1,5 +1,5 @@
|
||||||
# { pkgs ? import <nixpkgs> {} }:
|
# { pkgs ? import <nixpkgs> {} }:
|
||||||
{ pkgs ? import (fetchTarball https://github.com/NixOS/nixpkgs/archive/19.09-beta.tar.gz) {} }:
|
{ pkgs ? import (fetchTarball https://github.com/NixOS/nixpkgs/archive/19.09.tar.gz) {} }:
|
||||||
pkgs.mkShell {
|
pkgs.mkShell {
|
||||||
buildInputs = [ pkgs.coreutils
|
buildInputs = [ pkgs.coreutils
|
||||||
pkgs.html-xml-utils
|
pkgs.html-xml-utils
|
||||||
|
|
5
src/posts/0010-Haskell-Now/hello.hs
Executable file
5
src/posts/0010-Haskell-Now/hello.hs
Executable file
|
@ -0,0 +1,5 @@
|
||||||
|
#! /usr/bin/env nix-shell
|
||||||
|
#! nix-shell -i runghc
|
||||||
|
#! nix-shell -p "ghc.withPackages (ps: [ ps.protolude ])"
|
||||||
|
#! nix-shell -I nixpkgs="https://github.com/NixOS/nixpkgs/archive/19.09.tar.gz"
|
||||||
|
main = putStrLn "Hello World!"
|
|
@ -185,6 +185,46 @@ The environment in which you will learn Haskell will be quite different
|
||||||
from an environment to use Haskell seriously for a new project.
|
from an environment to use Haskell seriously for a new project.
|
||||||
This is because, there are too much choices for that.
|
This is because, there are too much choices for that.
|
||||||
|
|
||||||
|
|
||||||
|
Mainly, you can start by writing your code in a file and executing it by
|
||||||
|
putting one of the following at the top of your file:
|
||||||
|
|
||||||
|
If you chose Nix: https://nixos.org/nix/
|
||||||
|
|
||||||
|
#+BEGIN_EXAMPLE
|
||||||
|
#! /usr/bin/env nix-shell
|
||||||
|
#! nix-shell -i runghc
|
||||||
|
#! nix-shell -p "ghc.withPackages (ps: [ ps.protolude ])"
|
||||||
|
#! nix-shell -I nixpkgs="https://github.com/NixOS/nixpkgs/archive/19.09.tar.gz"
|
||||||
|
#+END_EXAMPLE
|
||||||
|
|
||||||
|
|
||||||
|
If you chose Stack: https://haskellstack.org
|
||||||
|
|
||||||
|
#+BEGIN_EXAMPLE haskell
|
||||||
|
#!/usr/bin/env stack
|
||||||
|
{- stack script
|
||||||
|
--resolver lts-14.16
|
||||||
|
--install-ghc
|
||||||
|
--package protolude
|
||||||
|
-}
|
||||||
|
#+END_EXAMPLE
|
||||||
|
|
||||||
|
*** code :noexport:
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: code
|
||||||
|
:END:
|
||||||
|
|
||||||
|
|
||||||
|
#+name nixb
|
||||||
|
#+begin_src elisp :export none
|
||||||
|
(defun nixb ()
|
||||||
|
"#! /usr/bin/env nix-shell\n#! nix-shell -i runghc\n#! nix-shell -p \"ghc.withPackages (ps: [ ps.protolude ])\"\n#! nix-shell -I nixpkgs=\"https://github.com/NixOS/nixpkgs/archive/19.09.tar.gz\"")
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+RESULTS:
|
||||||
|
: nixb
|
||||||
|
|
||||||
** Don't be afraid
|
** Don't be afraid
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:CUSTOM_ID: don't-be-afraid
|
:CUSTOM_ID: don't-be-afraid
|
||||||
|
@ -199,39 +239,29 @@ At first I won't show you any Haskell super power. I will start with
|
||||||
similarities between Haskell and other programming languages. Let's jump
|
similarities between Haskell and other programming languages. Let's jump
|
||||||
to the mandatory "Hello World".
|
to the mandatory "Hello World".
|
||||||
|
|
||||||
#+BEGIN_SRC haskell
|
[[./hello.hs]]
|
||||||
main = putStrLn "Hello World!"
|
#+NAME: hello.hs
|
||||||
|
#+BEGIN_SRC haskell :tangle hello.hs :shebang (nixb)
|
||||||
|
main = putStrLn "Hello World!"
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
To run it, you can save this code in a =hello.hs= and:
|
|
||||||
|
|
||||||
#+BEGIN_EXAMPLE
|
#+BEGIN_EXAMPLE
|
||||||
~ runhaskell ./hello.hs
|
> chmod +x hello.hs
|
||||||
Hello World!
|
> ./hello.hs
|
||||||
|
Hello World!
|
||||||
#+END_EXAMPLE
|
#+END_EXAMPLE
|
||||||
|
|
||||||
or if you use =stack= first run =stack setup= and then:
|
|
||||||
|
|
||||||
#+BEGIN_EXAMPLE
|
#+BEGIN_EXAMPLE
|
||||||
~ stack runhaskell ./hello.hs
|
> stack ghc -- hello.hs
|
||||||
Hello World!
|
> ./hello
|
||||||
|
Hello World!
|
||||||
#+END_EXAMPLE
|
#+END_EXAMPLE
|
||||||
|
|
||||||
You could also download the literate Haskell source. You should see a
|
|
||||||
link just above the introduction title. Download this file as
|
|
||||||
=00_hello_world.lhs= and:
|
|
||||||
|
|
||||||
#+BEGIN_EXAMPLE
|
|
||||||
~ runhaskell 00_hello_world.lhs
|
|
||||||
Hello World!
|
|
||||||
#+END_EXAMPLE
|
|
||||||
|
|
||||||
-----
|
|
||||||
|
|
||||||
Now, a program asking your name and replying "Hello" using the name you
|
Now, a program asking your name and replying "Hello" using the name you
|
||||||
entered:
|
entered:
|
||||||
|
|
||||||
#+BEGIN_SRC haskell
|
#+NAME: name.hs
|
||||||
|
#+BEGIN_SRC haskell :tangle name.hs :shebang (nixb)
|
||||||
main = do
|
main = do
|
||||||
print "What is your name?"
|
print "What is your name?"
|
||||||
name <- getLine
|
name <- getLine
|
||||||
|
|
8
src/posts/0010-Haskell-Now/name.hs
Executable file
8
src/posts/0010-Haskell-Now/name.hs
Executable file
|
@ -0,0 +1,8 @@
|
||||||
|
#! /usr/bin/env nix-shell
|
||||||
|
#! nix-shell -i runghc
|
||||||
|
#! nix-shell -p "ghc.withPackages (ps: [ ps.protolude ])"
|
||||||
|
#! nix-shell -I nixpkgs="https://github.com/NixOS/nixpkgs/archive/19.09.tar.gz"
|
||||||
|
main = do
|
||||||
|
print "What is your name?"
|
||||||
|
name <- getLine
|
||||||
|
print ("Hello " ++ name ++ "!")
|
|
@ -225,7 +225,7 @@ Along my script I have a [[file:rss-gen/shell.nix][=shell.nix=]] file containing
|
||||||
|
|
||||||
#+begin_src nix
|
#+begin_src nix
|
||||||
# { pkgs ? import <nixpkgs> {} }:
|
# { pkgs ? import <nixpkgs> {} }:
|
||||||
{ pkgs ? import (fetchTarball https://github.com/NixOS/nixpkgs/archive/19.09-beta.tar.gz) {} }:
|
{ pkgs ? import (fetchTarball https://github.com/NixOS/nixpkgs/archive/19.09.tar.gz) {} }:
|
||||||
pkgs.mkShell {
|
pkgs.mkShell {
|
||||||
buildInputs = [ pkgs.coreutils pkgs.html-xml-utils pkgs.zsh pkgs.perl pkgs.perlPackages.URI ];
|
buildInputs = [ pkgs.coreutils pkgs.html-xml-utils pkgs.zsh pkgs.perl pkgs.perlPackages.URI ];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# { pkgs ? import <nixpkgs> {} }:
|
# { pkgs ? import <nixpkgs> {} }:
|
||||||
{ pkgs ? import (fetchTarball https://github.com/NixOS/nixpkgs/archive/19.09-beta.tar.gz) {} }:
|
{ pkgs ? import (fetchTarball https://github.com/NixOS/nixpkgs/archive/19.09.tar.gz) {} }:
|
||||||
pkgs.mkShell {
|
pkgs.mkShell {
|
||||||
buildInputs = [ pkgs.coreutils pkgs.html-xml-utils pkgs.zsh ];
|
buildInputs = [ pkgs.coreutils pkgs.html-xml-utils pkgs.zsh ];
|
||||||
}
|
}
|
||||||
|
|
|
@ -196,7 +196,7 @@ Avec Nix: https://nixos.org/nix/
|
||||||
#! /usr/bin/env nix-shell
|
#! /usr/bin/env nix-shell
|
||||||
#! nix-shell -i runghc
|
#! nix-shell -i runghc
|
||||||
#! nix-shell -p "ghc.withPackages (ps: [ ps.protolude ])"
|
#! nix-shell -p "ghc.withPackages (ps: [ ps.protolude ])"
|
||||||
#! nix-shell -I nixpkgs="https://github.com/NixOS/nixpkgs/archive/18.09-beta.tar.gz"
|
#! nix-shell -I nixpkgs="https://github.com/NixOS/nixpkgs/archive/18.09.tar.gz"
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
*** Hello World! (1/3)
|
*** Hello World! (1/3)
|
||||||
|
|
Loading…
Reference in a new issue