「7つの言語 7つの世界」第8章の学習のために、Haskell(ハスケル)言語をインストールします。
7つの言語 7つの世界
- Ruby
- Io
- Prolog
- Scala
- Erlang
- Cloijure
- Haskell
書籍では、GHC ( Glasgow Haskell Compiler ) 6.12.1を使っているよ。
Haskell公式サイト
公式サイトには、Minimal installers、Stack、Haskell Platform、いろいろあるけど、どれをダウンロードすればいいのかな?
書籍を学習するだけなら、ghcをインストールするだけでいいわよ。
Windows 10
https://www.haskell.org/ghc/download_ghc_8_8_3.html#windows64 から、Windows 64-bit用の tar.gzファイルをダウンロードします。
7-Zipで解凍すると、ghc-8.8.3
フォルダができます。
C:\ghc-8.8.3
に移動(またはコピペ)します。
Haskell学習フォルダの下にenv.bat
を作ります。筆者は、C:\Users\aoki.makoto\projects\personals\study_7lang\haskell\env.bat
に作りました。
PATH=C:\ghc-8.8.3\bin;%PATH%
Code language: DOS .bat (dos)
Haskell学習フォルダにcdして、env.batを実行します。
C:> cd projects\personals\study_7lang\haskell
C:> env.bat
Code language: plaintext (plaintext)
ghci
でコンソールを起動します。:quit
または :q
でコンソールを終了します。
C:> ghci --version
The Glorious Glasgow Haskell Compilation System, version 8.8.3
C:> ghci
GHCi, version 8.8.3: https://www.haskell.org/ghc/ :? for help
Prelude>
Prelude> :quit
Leaving GHCi.
C:>
Code language: plaintext (plaintext)
macOS(Mac OS X) 10.15.4
homebrew
でghc
をインストールします。
$ brew install ghc
(省略)
==> Pouring ghc-8.10.1.catalina.bottle.tar.gz
==> /usr/local/Cellar/ghc/8.10.1/bin/ghc-pkg recache
🍺 /usr/local/Cellar/ghc/8.10.1: 6,886 files, 1.5GB
$
Code language: Bash (bash)
コンソールは、ghci
です。バージョンは 8.10.1
でした。
$ which ghci
/usr/local/bin/ghci
$ ghci --version
The Glorious Glasgow Haskell Compilation System, version 8.10.1
Code language: Bash (bash)
コンソールを起動します。:quit
または :q
でコンソールを終了します。
$ ghci
GHCi, version 8.10.1: https://www.haskell.org/ghc/ :? for help
Prelude>
Prelude> :quit
Leaving GHCi.
Code language: Bash (bash)
Ubuntu 18.04
apt
でghc
をインストールします。
$ sudo apt install ghc
Code language: Bash (bash)
コンソールは、ghci
です。バージョンは 8.0.2
でした。
$ which ghci
/usr/bin/ghci
$ ghci --version
The Glorious Glasgow Haskell Compilation System, version 8.0.2
Code language: Bash (bash)
コンソールを起動します。:quit
または :q
でコンソールを終了します。
$ ghci
GHCi, version 8.0.2: http://www.haskell.org/ghc/ :? for help
Prelude>
Prelude> :quit
Leaving GHCi.
Code language: Bash (bash)
書籍内コードほか
Haskellのコメントは、単一行コメントは「-- 」に続けて書きます。複数行コメントは「{-」と「-}」で囲んで書きます。
-- これはコメントだよ
{-
これもコメントだね
-}
{- これもコメントだよ -}
Code language: Haskell (haskell)
p235 code/haskell/double.hs
を :load
すると、エラーになりました。
module Main where
double x = x + x
Code language: Haskell (haskell)
Prelude> :load double.hs
[1 of 1] Compiling Main ( double.hs, interpreted )
double.hs:1:1: error:
The IO action ‘main’ is not defined in module ‘Main’
Failed, module
Code language: Haskell (haskell)
main :: IO () main = return ()
の2行を追加することで、:load
できました。
module Main where
main :: IO ()
main = return ()
double x = x + x
Code language: Haskell (haskell)
Prelude> :load double.hs
[1 of 1] Compiling Main ( double.hs, interpreted )
Ok, modules loaded: Main.
*Main>
Code language: Haskell (haskell)
p243 リスト内包表記を検索していたら、Haskellには拡張構文として、並列内包表記があるそうです。
ghciを起動するとき、-XParallelListComp
オプションを指定します。
$ ghci -XParallelListComp
Prelude> [(x,y) | x <- [1,2,3,4,5], y <- [3,4,5]]
[(1,3),(1,4),(1,5),(2,3),(2,4),(2,5),(3,3),(3,4),(3,5),(4,3),(4,4),(4,5),(5,3),(5,4),(5,5)]
Prelude> [(x,y) | x <- [1,2,3,4,5] | y <- [3,4,5]]
[(1,3),(2,4),(3,5)]
Code language: Haskell (haskell)
p248 foldl1
*Main> foldll (+) [1 .. 3]
<interactive>:29:1: error:
• Variable not in scope:
foldll :: (Integer -> Integer -> Integer) -> [Integer] -> t
• Perhaps you meant one of these:
‘foldl’ (imported from Prelude), ‘foldl1’ (imported from Prelude),
‘foldr’ (imported from Prelude)
Code language: Haskell (haskell)
あれ、エラーになっちゃったよ
fold 小文字エル 小文字エル と入力してるわね
fold 小文字エル 数字の1 よ。
*Main> foldl1 (+) [1 .. 3]
6
Code language: Haskell (haskell)
セルフスタディ
セルフスタディ1日目と2日目はがんばったけど、
セルフスタディ3日目は難しかったようね