Haskell Hello World!
Paradigma de programación (como OOP) en donde funciones son funciones matemáticas!
Idea principal: Programas son combinaciones de expresiones
En Haskell: Funciones son ciudadanas de primera clase
Lenguaje puro == transparencia referencial
Nada desde casi nada
SuperConjunto
Sin sentido o Valor
Abstraciones
λ x . x
^─┬─^
└────── la extensión de la cabeza de el término lambda.
λ x . x
^────── El parámetro único de la función. Esta vincula
cualquier variable con el mismo nombre
En el cuerpo de la función.
λ x . x
^── cuerpo, La expresión lambda que se devuelve
cuando se aplica. Esta es una variable enlazada.
El punto (.) separa los parámetros
$$ \lambda xy. x (3) $$
$$ \lambda xy. x y $$
¡CURRYING!
Formal normal beta
Programa totalmente ejecutado
Formal normal beta NO CONVERGE
$$ (\lambda x.xx)(\lambda x. xx) $$
Formal normal beta NO CONVERGE
$$ (\lambda x.xx)(\lambda x. xx) $$
$ curl -sSL https://get.haskellstack.org/ | sh
# o por si alguna razón no tenemos curl
$ sudo apt-get install wget
...
wget -qO- https://get.haskellstack.org/ | sh
[dgromov@gl552vw Haskell]$ stack --version
Version 1.3.2, Git
[dgromov@gl552vw Haskell]$ stack new holamundo new-template
Looking for .cabal or package.yaml files to use to init the project.
Using cabal packages:
- holamundo/holamundo.cabal
Selecting the best among 10 snapshots...
* Matches lts-8.5
Selected resolver: lts-8.5
Initialising configuration using resolver: lts-8.5
Total number of user packages considered: 1
Writing configuration to file: holamundo/stack.yaml
All done.
[dgromov@gl552vw holamundo]$ stack setup
Preparing to install GHC to an isolated location.
# Esperaremos a que stack baje la versión GHC requerida esta en stack.yaml resolver
This will not interfere with any system-level installation.
Downloaded ghc-8.0.2.
Unpacking GHC into /home/dgromov/.stack/programs/x86_64-linux/ghc-8.0.2.temp/ .. Installed GHC.
stack will use a sandboxed GHC it installed
For more information on paths, see 'stack path' and 'stack exec env'
To use this GHC and packages outside of a project, consider using:
stack ghc, stack ghci, stack runghc, or stack exec
Creando el ejecutable
[dgromov@gl552vw holamundo]$ stack build
[1 of 2] Compiling Main ( /home/dgromov/.stack/setup-exe-src/setup-mPHDZzAJ.hs, /home/dgromov/.stack/setup-exe-src/setup-mPHDZzAJ.o )
[2 of 2] Compiling StackSetupShim ( /home/dgromov/.stack/setup-exe-src/setup-shim-mPHDZzAJ.hs, /home/dgromov/.stack/setup-exe-src/setup-shim-mPHDZzAJ.o )
Linking /home/dgromov/.stack/setup-exe-cache/x86_64-linux/tmp-Cabal-simple_mPHDZzAJ_1.24.2.0_ghc-8.0.2 ...
holamundo-0.1.0.0: configure (lib + exe)
Configuring holamundo-0.1.0.0...
holamundo-0.1.0.0: build (lib + exe)
Preprocessing library holamundo-0.1.0.0...
[1 of 1] Compiling Lib ( src/Lib.hs, .stack-work/dist/x86_64-linux/Cabal-1.24.2.0/build/Lib.o )
Preprocessing executable 'holamundo-exe' for holamundo-0.1.0.0...
[1 of 1] Compiling Main ( app/Main.hs, .stack-work/dist/x86_64-linux/Cabal-1.24.2.0/build/holamundo-exe/holamundo-exe-tmp/Main.o )
|Finalmente el ejecutable!
[dgromov@gl552vw holamundo]$ stack exec holamundo-exe
someFunc
# This file was automatically generated by 'stack init'
#
# Resolver to choose a 'specific' stackage snapshot or a compiler version.
# A snapshot resolver dictates the compiler version and the set of packages
# to be used for project dependencies. For example:
#
# resolver: lts-3.5
# resolver: nightly-2015-09-21
# resolver: ghc-7.10.2
# resolver: ghcjs-0.1.0_ghc-7.10.2
# resolver:
# name: custom-snapshot
# location: "./custom-snapshot.yaml"
resolver: lts-8.5