Entradas

WebAssembly con Haskell

Imagen
WebAssembly es un lenguaje de bajo nivel, similar a ensamblador, diseñado para ser rápido de cargar y ejecutar en navegadores modernos. Su objetivo es permitir que aplicaciones escritas en distintos lenguajes se ejecuten en la web con velocidad casi nativa. Los formatos que soporta son: .wasm : un formato binario ejecutable.  .wat : un formato formato de texto legible. Se complementa con JavaScript; permite invocar funciones WASM desde JS y viceversa. ¿Cuál es el objetivo de WebAssembly? El objetivo de WebAssembly es compilar código escrito en lenguajes como Rust, C o C++ (entre otros) y transformarlo en un módulo .wasm que puede ejecutarse en navegadores o en entornos como Node.js con rendimiento cercano al nativo. Flujo típico de trabajo con WebAssembly Escribimos nuestro código en un lenguaje soportado (ej. Rust, C, C++, Go, AssemblyScript).  Compilamos ese código a WebAssembly y se generará un archivo .wasm .  Cargamos el módulo en tu aplicaci...

Programación funcional en Haskell

Imagen
Uno de los puntos fuertes de Haskell es la programación funcional pura . La cual se centra en funciones matemáticas puras, sin efectos secundarios , y en transformar datos de manera predecible. Donde cada función es como una receta que recibe ingredientes (datos de entrada) y devuelve un resultado (salida). Donde las funciones no alteran cosas externas (osea, sin efectos secundarios), solo trabajan con lo que reciben. Donde los datos no cambian , se transforman en nuevos resultados . Donde no se evalúa una expresión hasta que su resultado sea estrictamente necesario , permitiendo el manejo de estructuras de datos infinitas. Con Haskell es como si trabajaras con fórmulas matemáticas, cada función es una operación que siempre da el mismo resultado con los mismos datos. Incluso permitiendo que las funciones tomen a otras funciones como argumentos, o simplemente devolviendo éstas. Es como hacer un jugo de naranja. Tomas la naranja y la exprimes, y así obtienes su j...

Tipos de datos en Haskell

Imagen
Como hemos mencionado, Haskell es un lenguaje de programación funcional de tipado estático . ¿Qué quiere decir esto? En Haskell es necesario especificar qué tipos de datos vamos a emplear en nuestros programas.  Puesto que al compilar el programa (sí, Haskell se compila) se evaluarán los tipos para saber si son enteros, booleanos o cadenas de caracteres. Además al tener inferencia de tipos no tenemos que especificar, por ejemplo, que un número es un número. Comprobemos esto. Abrimos una terminal y tecleamos: $ ghci Esto abrirá el REPL de Haskell . Usemos el comando :type o el abreviado :t para ver los tipos de datos. ghci > : type "Esto es una cadena" "Esto es una cadena" :: String ghci > : type 33 33 :: Num a => a ghci > : type True True :: Bool ghci > :t 'X' 'X' :: Char ghci > :t 23 + 32 23 + 32 :: Num a => a En este ejemplo vemos los tipos: Char , String , ...

Cabal en otro vistazo

Imagen
Como vimos en una entrega anterior , Cabal es la herramienta estándar para gestionar dependencias, compilar y empaquetar proyectos Haskell, lo que te permite organizar y distribuir tu código de manera profesional. Con Haskell (y Cabal) podemos desarrollar desde pequeñas utilidades de línea de comandos hasta aplicaciones web, bibliotecas científicas, proyectos de análisis de datos y compiladores. Recapitulando: Cabal es el sistema de construcción y empaquetado de Haskell.  Se basa en archivos .cabal que describen el proyecto: nombre, dependencias, módulos, ejecutables, etc.  Permite compilar, instalar y distribuir bibliotecas y programas de forma portable.  Es el equivalente a package.json en Node.js o pom.xml en Maven. Conversión de grados Celsius a Fahrenheit con Haskell (y Cabal) Crearemos una sencilla calculadora de conversión de grados Celsius a Fahrenheit. El único dato necesario serán los grados en Celsius. 1. Mostramos la versión instal...

Aprende Haskell por el bien de todos (libro online)

Imagen
Para quienes quieran aprender Haskell y no sepan dónde buscar, hay un sitio imperdible que debes visitar: http://aprendehaskell.es/ Se empieza con saber de qué trata el lenguaje, su paradigma, qué herramientas instalar, además de muchos ejemplos. Desde los tipos de datos (Haskell es de tipado fuerte), la sintaxis básica de una función, declaración de variables, estructuras, etc. El sitio ideal para los principiantes. Enlaces: http://aprendehaskell.es/

Cabal

Imagen
Cabal es un conjunto de herramientas para proyectos Haskell. Nos ayuda a crear y empaquetar bibliotecas y programas de Haskell . Define una interfaz común para que los creadores y distribuidores de paquetes creen fácilmente sus aplicaciones de forma portable. Forma parte de una infraestructura más amplia para distribuir, organizar y catalogar bibliotecas y programas de Haskell . Instalando Cabal en Windows: $ Set-ExecutionPolicy Bypass -Scope Process -Force; [ System.Net.ServicePointManager ] ::SecurityProtocol = [ System.Net.ServicePointManager ] ::SecurityProtocol -bor 3072 ; try { & ([ ScriptBlock ] ::Create (( Invoke-WebRequest https://www.haskell.org/ghcup/sh/bootstrap-haskell.ps1 -UseBasicParsing ))) -Interactive -DisableCurl } catch { Write-Error $_ } Verificando la instalación: $ cabal --version Instalación en Linux: $ curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh $ source ~/.bashrc ...

Hola, mundo en Haskell

Imagen
Haskell es un lenguaje de programación funcional cuyas características fundamentales son: Existencia de variables inmutables.  El estado mutable solo se puede mediante monads .  Pureza por default (los efectos secundarios es mediante monads ).  Evaluación perezosa ( lazy ): los resultados solo se calculan si es necesario.  En Haskell todo es una expresión .  Funciones de primera clase: las funciones pueden definirse en cualquier lugar; pasarse como argumentos y devolverse como valores.  Implementaciones compiladas e interpretadas disponibles.  Inferencia de tipos completa: las declaraciones de tipo son opcionales.  Coincidencia de patrones ( pattern matching ) en estructuras de datos: son de primera clase.  Polimorfismo paramétrico. Con Haskell nos olvidamos de la declaración de tipos, pero si hay tipos y son: Bool.  Char.  String.  Integer o Int.  Float.  Double.  Num. Veamos el clásico progra...