Haskellでいってみよう

日曜プログラマにも満たないレベルでもHaskellで何かソフトウェアを作りたい!

まずは "Hello, World!" から

実用的なプログラムを作ることが目的なので、実行ファイルを
作成できなくては始まらない。Haskellの本だと対話環境を使った
リスト操作や再起などの説明が多いが、そうではなくてまずは
コンパイルしてみる。お決まりの"Hello, World!"でも書いてみる。

(Greeting.hs)

main = putStrLn "Hello, World!"

Rubyほど短くないが、かなり簡潔に書ける方だと思う。Javaだと
いろいろ修飾が大変、というのもHaskellに流れてきた理由の一つ。

コンパイルする。

$ ghc Greeting

これで、"Greeting"という実行ファイルができる。簡単だ。
出力ファイルの名前指定(-o オプション)や最適化(-O, -O2)も
OK。(前は"--make"をつけていたが今は要らないらしい)

http://d.hatena.ne.jp/kazu-yamamoto/20140206/1391666962

$ ghc -o gre -O2 Greeting

大きなプログラムになるとモジュール分割とか出てくるので、
その辺も書いておく。mainの型も。

(Greeting2.hs)

module Main (
  main
) where

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

最初、モジュール名は何でもいいと思ってJavaみたいにファイル名と
同じにしてたら失敗した。ghcは「Mainモジュールの"main"」がないと
実行ファイルを作ってくれないみたい。最初の例ではモジュール名を
書かなかったので勝手にMainとして処置してくれたらしい。
Mainの後ろの括弧内に外部へ公開したい名前を羅列するそうだ
カプセル化みたいに?)。

最後に、画面から名前を入力させてあいさつさせてみる。

(Greeting3.hs)

module Main (
  main
) where

main :: IO ()
main = do
  putStrLn "What's your name? "
  name <- getLine
  putStrLn ("Hello, " ++ name ++ ". Nice to meet you!")

実行するとこんな感じ。

$ ghc -o gre Greeting3
  :
$ ./gre
What's your name?
Taro                              <= 入力
Hello, Taro. Nice to meet you!

できた。