Edited at
HaskellDay 23

StackでHaskellプロジェクトを作ってみる

More than 3 years have passed since last update.


StackでHaskellプロジェクトを作ってみる

最初 cabal で何かやってみようと思ったのですがしょっぱなから動かなかったので stack を入れてみた。

環境はDebian GNU/Linux sid です。


  • とりあえず haskell-stack を入れる

    # apt-get install haskell-stack


  • stack new [PACKAGE_NAME] でプロジェクトを作ってみる

    $ stack new haskell-start


  • 何かいろいろ出て無事終了、プロジェクトに移動

    $ cd haskell-start



Build & Run


  • とりあえず stack build を打つと、勝手にビルドできた!

    $ stack build


  • とりあえず stack exec [PACKAGE_NAME]-exe を打ってみる

    $ stack exec haskell-start-exe

    someFunc


何か出力出来ました!ビルドシステムは sbtmavenautotools を知っていますが。

stackはどうやらそれらと同じような感じで操作できるようです。

しかも --help を叩くと、 msys の文字が見えたり。多機能な感じがします。


Hello, World


  • どこを書き換えたらよいかはもうなんとなくわかります src/Lib.hs をいじって


haskell

module Lib

( someFunc
) where

someFunc :: IO ()
-someFunc = putStrLn "someFunc"
+someFunc = putStrLn "Hello, World !!"



  • Build & Run

    $ stack build && stack exec haskell-start-exe

    Hello, World !!


足し算とかする



  • src/Lib.hs をいじって


haskell

module Lib

( someFunc,
addFunc, -- ここに書けば関数が外部公開できるようだ
minusFunc
) where

import Text.Printf -- Printf できるらしい -> http://stackoverflow.com/a/15566360/2565527

someFunc :: IO ()
someFunc = putStrLn "Hello, World !!"

add :: Int -> Int -> Int -- アロー演算子の左が引数、右が返り値で、ネストしてる。型を書く。
add a b = a + b -- カンマはいらないらしい

addFunc :: IO ()
addFunc = putStrLn . printf "%d" $ add 1 3 -- Haskell慣れてなくてもなんとなくわかる?

minus :: Int -> Int -> Int
minus a b = a - b

minusFunc :: IO ()
minusFunc = putStrLn . printf "%d" $ minus 1 3




  • app/Main.hs をいじって


haskell

module Main where

import Lib

main :: IO ()
main = addFunc



  • Build & Run

    $ stack build && stack exec haskell-start-exe

    4


まとめ


stackcabal より簡単 ✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌

なんせHaskell歴3時間の私が使えたのですから…