起動
$ ghci ___ ___ _ / _ \ /\ /\/ __(_) / /_\// /_/ / / | | GHC Interactive, version 6.4.1, for Haskell 98. / /_\\/ __ / /___| | http://www.haskell.org/ghc/ \____/\/ /_/\____/|_| Type :? for help. Loading package base-1.0 ... linking ... done.
ヘルプ
Prelude> :help Commands available from the prompt: <stmt> evaluate/run <stmt> :add <filename> ... add module(s) to the current target set :browse [*]<module> display the names defined by <module> :cd <dir> change directory to <dir> :def <cmd> <expr> define a command :<cmd> :help, :? display this list of commands :info [<name> ...] display information about the given names :load <filename> ... load module(s) and their dependents :module [+/-] [*]<mod> ... set the context for expression evaluation :reload reload the current module set :set <option> ... set options :set args <arg> ... set the arguments returned by System.getArgs :set prog <progname> set the value returned by System.getProgName :show modules show the currently loaded modules :show bindings show the current bindings made at the prompt :type <expr> show the type of <expr> :kind <type> show the kind of <type> :undef <cmd> undefine user-defined command :<cmd> :unset <option> ... unset options :quit exit GHCi :!<command> run the shell command <command> Options for ':set' and ':unset': +r revert top-level expressions after each evaluation +s print timing/memory stats after each evaluation +t print type after evaluation -<flags> most GHC command line flags can also be set here (eg. -v2, -fglasgow-exts, etc.)
終了
Prelude> :quit
またはCtrl-d
数値
整数,浮動小数点数
Prelude> 42 42 Prelude> 3.14 3.14 Prelude> 0xFF 255
演算
Prelude> 1+1 2 Prelude> 2-1 1 Prelude> 2*3 6 Prelude> 4/2 2.0 Prelude> 2 ^ 10 1024
文字列
文字列は""で囲む
Prelude> "Haskell" "Haskell"
文字列の連結
Prelude> "Hello" ++ ", " ++ "World" "Hello, World"
真偽値
TrueとFalseがある.
Prelude> True && False False Prelude> True || False True Prelude> not True False
リスト
リストは[]で囲む
Prelude> [0, 1, 2, 3] [0,1,2,3]
文字列は実は文字のリストである.
Prelude> ['H', 'a', 's', 'k', 'e', 'l', 'l'] "Haskell"
インデクシングは!!で行う.
Prelude> "Haskell" !! 2 's'
':'でリストの最初と残りの部分を表現できる
Prelude> 1:2:[] [1,2]
リストの要素は同じ型でなければならない.
Prelude> [0, 'a', True] <interactive>:1:9: Couldn't match `Char' against `Bool' Expected type: Char Inferred type: Bool In the list element: True In the definition of `it': it = [0, 'a', True]
タプル
異なる型を含むことのできるリストみたいなもの.()で囲む.
Prelude> (42, "haskell", True) (42,"haskell",True)
型
':type'で型を調べる.
Prelude> :type 42 42 :: (Num t) => t Prelude> :type 'a' 'a' :: Char Prelude> :type True True :: Bool Prelude> :type "Haskell" "Haskell" :: [Char] Prelude> :type [0, 1, 2] [0, 1, 2] :: (Num a) => [a] Prelude> :type (42, "Haskell", True) (42, "Haskell", True) :: (Num a) => (a, [Char], Bool)
'(Num t) =>'というのは「数値(Num)であるtに対して」ぐらいの意味.型を表現するときも
リストは'[]'で囲み,タプルは'()'で囲む.
ファイルの読み込み
:load sample.hs
でsample.hsを読み込む.
モジュールの読み込み
:module hoge
でhogeを読み込む.
Charモジュールを読み込むと,文字列処理関数を利用できる.
Prelude> :module Char Prelude Char> isAlpha '1' False Prelude Char> isAlpha 'a' True Prelude Char> toUpper 'a' 'A'
省略形
今まで紹介してきたコマンドは省略形で呼び出すことができる.
:h[elp] :l[oad] filename :m[odule] module :q[uit] :t[ype] exp