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
何か出力出来ました!ビルドシステムは sbt
と maven
、autotools
を知っていますが。
stackはどうやらそれらと同じような感じで操作できるようです。
しかも --help
を叩くと、 msys
の文字が見えたり。多機能な感じがします。
Hello, World
- どこを書き換えたらよいかはもうなんとなくわかります
src/Lib.hs
をいじって
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
をいじって
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
をいじって
module Main where
import Lib
main :: IO ()
main = addFunc
- Build & Run
$ stack build && stack exec haskell-start-exe
4
まとめ
stack
は cabal
より簡単 ✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌
なんせHaskell歴3時間の私が使えたのですから…