ex6
というブランチで、課題6以降の執筆を続けています興味がある方は是非ご覧ください。こちらがmaster
にマージされるのは、課題22の文面まで一通り埋まってからです。あしからず。
作りながら学ぶHaskell入門
Stackのインストールを推奨します。
下記のいずれかの方法でインストールしてください。
「ターミナル」を起動し、下記のいずれかのコマンドを実行してください。
curl -sSL https://get.haskellstack.org/ | sh
あるいは、
wget -qO- https://get.haskellstack.org/ | sh
64bit版のWindowsをお使いの方はこちらからインストーラーをダウンロードして、インストールしてください(よくわからなければ、とりあえず64bit版を試してみてください。32bit版のWindowsをお使いの方は残念ながらあきらめてLinuxを仮想マシンで動かしてインストールしてください)。
Chocolateyをお使いの方は、
choco install haskell-stack
でもインストールできます。
現状はHackageにまだ公開していないので👇のコマンドを実行してください(どのOSでもこのコマンドです)。
git clone https://github.com/haskell-jp/makeMistakesToLearnHaskell
# あるいは git clone git://github.com/haskell-jp/makeMistakesToLearnHaskell
cd makeMistakesToLearnHaskell
stack install
GHCのインストールと、「Make Mistakes to Learn Haskell!」のビルドが始まります。
インストールが完了したら、「⚙️使い方」の節に書かれたコマンドを試してみてください。
なお、Linuxにおいて、libtinfoパッケージがないとインストールできない」というトラブルが報告されています。
例えばUbuntuの場合、下記のコマンドを実行してインストールしておく必要があるかも知れません。
sudo apt-get install libtinfo-dev
インストール中などに何か困ったことが発生した場合、下記のいずれかのウェブサービスで質問してみてください。
現状、当入門はまだまだ完成度が低いため、今後も度々更新することとなります。
アップデートが必要な場合は、👆の手順でgit clone
したディレクトリーに移動した上で、
git pull
stack install
を実行してください。
mmlh
課題1の内容を表示する
mmlh show 1
--terminal
オプションを付けて実行してください。
mmlh show --terminal 1
mmlh show
した課題のテストをする)
mmlh verify your_answer.hs
MSYS2を利用している場合、stackがインストールするMSYS2と衝突して問題が起こることがあります。その場合、%APPDATA%\stack\config.yaml
に以下の行を追加し、インストール済みのMSYSを使うように設定しましょう。
skip-msys: true
問題を表示したり、ユーザーが与えた回答を判定するための基本的なフレームワークはできています。
私 igrepが社内の勉強会で使用するため、下記のことに取り組んでいます。
ghci>
shell>
と書きましょう。
主に編集するファイルはsrc/Education/MakeMistakesToLearnHaskell/Exercise.hsです。
このファイルに各課題の判定方法や、ヒントの判定処理がすべてまとまっています。
文字列まわりで共通化できる処理を追加したくなったら、Exercise.hs
に直接追加するか、src/Education/MakeMistakesToLearnHaskell/Evaluator/
以下にファイルを追加するのが良いかと思います(おいおいRegex.hs
というファイルを追加します)。
課題の判定処理のテストを書く場合は、test/Education/MakeMistakesToLearnHaskell/ディレクトリーに、ExerciseNSpec.hs
(N
は整数)という名前のファイルを追加してください。
具体的なテストの書き方は既存のファイルを見ていただくとわかるかと思います。Hspecを使っています。
default-extensions
に記載した言語拡張のみを使うReaderT IO
パターンを使用せず、 Env
を受け取る関数を全体で使用する
CPP
を使うことでimport
をsrc/imports/external.hs
にまとめる、というかなり変わったことをしています。import
の書き方を統一する、同じimport
を何度も書かないで済ますために考えた方策です。external.hs
で外部のパッケージのimport
のみをまとめていますが、今後もっとコードベースが大きくなったとき、レイヤーを分ける際にも役立つでしょう。import
する際は、必ずsrc/imports/external.hs
に書いてください。