Articles avec #haskell tag

Publié le 14 Juillet 2014

Pour installer Haskell je vous recommande d'utiliser le gestionnaire de package brew qui rend l'installation beaucoup plus simple.

Pour installer haskell il suffit d'installer un compilateur haskell. Le plus connu étant ghc:

brew install ghc

ghc ne vient pas tout seul. Il est accompagné par ghci (un interpréteur) qui permet de taper du haskell en ligne de commande.

Pendant qu'on est avec brew je vous conseille d'installer le gestionnaire de package haskell: cabal.

brew install cabal-install

Comme IDE pour haskell j'ai rien trouvé de vraiment convaincant. 

Je sais qu'il y a un plugin Eclipse pour haskell ainsi qu'un IDE haskell nommé leksah mais j'ai pas vraiment essayé. A la place je me suis replongé dans emacs qui a un mode haskell.

Pour installer le mode haskell sous emacs il faut d'abord installer le gestionnaire de package emacs: marmelade. (ça commence à faire pas mal de gestionnaire de package!)

Donc dans votre fichier .emacs ajouter les lignes suivantes:

(require 'package)
(add-to-list 'package-archives
import System.Environment (getArgs) '("marmalade" . "http://marmalade-repo.org/packages/"))
(package-initialize)

puis M-x eval-buffer (ou relancer emacs)
M-x package-refresh-contents
M-x package-install [RET] haskell-mode

Ne pas oublier d'ajouter hoogle au path en modifiant votre .profile ou autre:

export PATH=$PATH:$HOME/.cabal/bin

Ensuite il faut télécharger les données d'hoogle:

hoogle data

Voilà hoogle est maintenant dispo en ligne de commande pour rechercher de la doc haskell. Par exemple pour rechercher la doc sur 'concatMap'

hoogle concatMap
hoogle --info concatMap

C'est sympa mais ce qui serait encore mieux ce serait d'avoir la doc disponible directement depuis ghci.

Et bien il suffit de créer deux fonctions dans un fichier .ghci qui vont appeler ces deux commandes.

Depuis ghci on peut exécuter une commande shell avec :!. Il faut aussi penser à échapper les guillemets simples ce qui donne au final:

let ghciEscapeShellArg arg = "'" ++ concatMap (\c -> if (c == '\'') then "'\"'\"'" else [c]) arg ++ "'"
:def search return . (":! hoogle " ++) . ghciEscapeShellArg
:def doc return . (":! hoogle --info " ++) . ghciEscapeShellArg

 

Voilà la prochaine fois que vous lancer ghci les commandes :search et :doc sont directement dispo.

Voir les commentaires

Rédigé par Bliz

Publié dans #haskell

Repost 0