Olá pessoal. Tudo certo!?
Então você leu o primeiro post dessa série?! Em caso negativo, leia antes de continuar. Em caso positivo, saiba que continuaremos a desvendar programação em Haskell sob a perspectiva de um cara que sabe programar em C#.
Se você está considerando aprender Haskell “de verdade”, recomendo o excelente livro Programming in Haskell que, aliás, estarei usando como referência para essa série.
Antes de qualquer coisa, em Haskell, quando falamos em “aplicar um função”, estamos dizendo o memso que “chamar/executar uma função” para um determinado conjunto de argumentos.
Haskell tem sintaxe extremamente econômica. Sendo assim, dispensa parênteses sempre que possível.
Por exemplo, em C#, você chamaria um método da mesma classe, passando um argumento, assim:
Foo(x);
em Haskell:
foo x
Dois argumentos, em C#:
Foo(a, b);
Em Haskell
foo a b
Em Haskell, além de não usar parênteses, você também não usa vírgulas para separar argumentos.
C#
Foo(Fee(x)); Foo(a, Fee(b));
Haskell
foo (fee x) foo a (fee b)
Repare, em Haskell os parênteses servem para determinar prioridade de execução.
Pegou a idéia?!
Haskell tem um conjunto rico de funções built-in. Entretanto, você pode definir suas próprias funções facilmente.
Para começar, crie um arquivo com um nome qualquer (usarei hello.hs). Perceba que hs (Haskell Script) é a extensão comum usada para arquivos que definem funções em Haskell.
Esse será o conteúdo:
add a b = a + b inc a = add a 1 double x = x + x quadruple x = double (double x)
Familiar, não?! Parecem expressões lambda em C#. Certo!? Veja:
Func<int, int, int> add = (a, b) => a + b; Func<int, int> inc = a => add(a, 1); Func<int, int> @double = x => x + x; Func<int, int> quadruple = x => @double(@double(x));
De onde você acha que o time do C# tirou a idéia?! ![]()
No hugs, utilize a opção do menu (File->Open) para carregar o script. Então, poderá usar suas novas funções normalmente.
Perceba que o Hugs executa a instrução :load do Haskell para efetivamente fazer o trabalho.
Era isso.
Pingback: Haskell para programadores C# – parte 3 – Tipos! Tipos! Tipos! .. e classes (?!). « Elemar DEV
Pingback: Haskell para programadores C# – parte 4– Respostas condicionais « Elemar DEV