Bem-vindo a esse curso! Esse projeto pretende ajudar você a aprender a programar na linguagem de programação Idris2 e entender sua filosofia e com isso fazer um futuro com software que quebre menos e seja mais fácil de se provar correto. Para compreender melhor esse livro, é importante saber o básico de programação.
Idris é uma linguagem de programação puramente funcional que surgiu em 2007 visando usar técnicas de verificação de software state-of-art em uma linguagem de programação que teria potencial para ser mainstream. Idris é muito influenciado por outras 3 linguagens funcionais (Agda, Haskell e Epigram), mas com a característica de ter linear types e dependent types.
Não se preocupe se você não entendeu metade dessas coisas, nós iremos caminhar por cada uma das características dentro desse curso. Mas em resumo, Idris é uma linguagem muito resiliente a falhas e tenta delegar muitas das tarefas de verificação do software para o compilador.
Idris1 foi uma tentativa de fazer uma linguagem prática, mas como toda primeira tentativa, ela teve seus erros e Idris2 é uma versão atualmente mais robusta e resolve grande parte desses problemas como, por exemplo:
Instalar Idris2 ainda é um processo árduo e com muita tentativa e erro (se você quiser instalar coisas para o Idris além do compilador). Porém, ainda sim, é possível instalar tanto no Windows (usando WSL) quanto no Linux.
A instalação no ubuntu é direta ao ponto. Porém, desse modo você não conseguirá instalar o Idris2 LSP já que não tem como instalar o Idris2 API.
sudo apt install idris2
-
Clonar o repositório do Idris2
https://github.com/idris-lang/Idris2
-
Entrar no repositório e buildar fazendo bootstrap usando o Chez Scheme (Precisa ter o chez scheme instalado e isso depende de cada distribuição linux)
sudo apt install chez
cd Idris2 && make bootstrap scheme=SCHEME
-
Após isso é necessário usar
make install
para colocar no lugar adequado. Caso você não consiga usar o comandoidris2
tente colocar o caminho~/.idris2/bin
na variável de ambientePATH
e reinicie o terminal.
-
Primeiro é necessário remover os arquivos de build do Idris2 já que a versão que você compilou provavelmente é mais antiga do que o compilador que você já tem.
cd Idris2 && rm -r build
idris2 --install idris2api.ipkg
(Para instalar a API)
-
Clonar o repositório do Idris2 LSP
https://github.com/idris-community/idris2-lsp
- Buildar ele com
make install
-
Instalar a extensão correspondente no seu editor de texto. No caso do Visual studio code a extensão recomendada é
idris2-lsp
- Instalar uma distribuição linux para WSL
- Fazer os passos para windows dentro do WSL
Um bom video para isso é o do Identity GS:
Uma explicação superficial — e que você não precisa entender totalmente — desse Hello World é:
- Primeira linha explicita que o nome do módulo é
Main
- Terceira linha declara a função
main
com tipoIO ()
que faz a função poder usar funções de entrada e saída de dados e retorna o tipo Unit (()
) - Quarta linha declara que a função main tem como valor a ação mostrar na tela o "Hello, World"
Arquivo: Main.idr
module Main
main : IO ()
main = putStrLn "Hello, World!"
Para melhorar o REPL do Idris, podemos utilizar uma dependência chamada rlwrap
. Instalar essa dependência é bem simples, porém, depende de cada sistema.
$ rlwrap idris2
____ __ _ ___
/ _/___/ /____(_)____ |__ \
/ // __ / ___/ / ___/ __/ / Version 0.5.1-0a4fd3dc0
_/ // /_/ / / / (__ ) / __/ https://www.idris-lang.org
/___/\__,_/_/ /_/____/ /____/ Type :? for help
Welcome to Idris 2. Enjoy yourself!
Main> 23 * 32 +3-233
506
Há vários comandos úteis no REPL do Idris:
:help
Que mostra uma lista de comandos:t
Que mostra o tipo da expressãoMain> :t 3 3 : Integer
:q
Para sair:module
Para importar um módulo como por exemploMain> :module Data.List Main> zip [1,2,3] [4,5,6] [(1, 4), (2, 5), (3, 6)]
:doc
Que mostra a documentação para uma certa palavra chave ou nome.Main> :doc reverse Prelude.reverse : String -> String Reverses the elements within a string. ``idris example reverse "ABC" `` ``idris example reverse "" `` Totality: total
:l
Para carregar um arquivo:r
Para recarregar um arquivo:exec
Para executar comandos de IO tal como:Main> :exec putStrLn "☆*:.。.o(≧▽≦)o.。.:*☆" ☆*:.。.o(≧▽≦)o.。.:*☆
Todas palestras sobre Idris1 dão uma boa introdução tanto sobre Idris2 quanto Idris1
Link | Description |
---|---|
https://idris2.readthedocs.io/ | Tutorial oficial feito para pessoas que já tem noção de Ocaml ou Haskell |
https://www.youtube.com/watch?v=X36ye-1x_HQ | Sobre Idris1 e Desenvolvimento orientado a tipos |
https://www.youtube.com/watch?v=zSsCLnLS1hg | Um curso de 4 aulas sobre Idris1 |
https://www.youtube.com/watch?v=nbClauMCeds | Novidades em Idris2 |
https://www.youtube.com/watch?v=mOtKD7ml0NU | Desenvolvimento orientado a tipos em Idris2 |
https://www.youtube.com/watch?v=_prvbd0e_pI | Entrevista com Edwin Brady sobre Idris2 |