Help us understand the problem. What is going on with this article?

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away