LoginSignup
9
8

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-12-22

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時間の私が使えたのですから…

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8