Make Mistakes to Learn Haskell - 失敗しながら学ぶHaskell入門
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
app
assets
scripts Add script to generate test cases for given files Sep 15, 2018
src
test
.gitignore
.travis.yml Codes containing warnings should be rejected by CI Nov 3, 2018
LICENSE
README.md
Setup.hs
appveyor.yml
package.yaml Add colored output feature when verify Nov 9, 2018
stack.yaml

README.md

Make Mistakes to Learn Haskell!

作りながら学ぶHaskell入門

💾インストール方法

まだStackHaskell Platformをインストールしていない場合は

Stackのインストールを推奨します。
下記のいずれかの方法でインストールしてください。

🍎🐧Mac OS XやLinuxなどのUnix系OSをお使いの方:

「ターミナル」を起動し、下記のいずれかのコマンドを実行してください。

curl -sSL https://get.haskellstack.org/ | sh

あるいは、

wget -qO- https://get.haskellstack.org/ | sh

🏁Windowsをお使いの方

64bit版のWindowsをお使いの方はこちら32bit版のWindowsをお使いの方はこちらからインストーラーをダウンロードして、インストールしてください(よくわからなければ、とりあえず64bit版を試してみてください)。

Chocolateyをお使いの方は、

choco install haskell-stack

でもインストールできます。

💾GHCのインストール方法

ここまででstackをインストールされた方は、

stack setup

というコマンドを実行してください(どのOSでもこのコマンドです)。
GHCのインストールが始まります。

GHCのインストールが終わったら、

stack exec ghc -- --version

と実行して、GHCが正常にインストールできたことを確認してください(ghc--versionの間に--を挟まないといけない点にご注意ください)。
The Glorious Glasgow Haskell Compilation Systemで始まる文字列が表示されたら、無事インストールができた証拠です。

例:

The Glorious Glasgow Haskell Compilation System, version 8.4.3

⚠️トラブルが発生したら:

インストール中などに何か困ったことが発生した場合、下記のいずれかのウェブサービスで質問してみてください。

💾「Make Mistakes to Learn Haskell!」自体のインストール方法

現状はHackageにまだ公開していないので👇のコマンドを実行してください。

git clone https://github.com/haskell-jp/makeMistakesToLearnHaskell
# あるいは git clone git://github.com/haskell-jp/makeMistakesToLearnHaskell

cd makeMistakesToLearnHaskell
stack install

インストールが完了したら、「⚙️使い方」の節に書かれたコマンドを試してみてください。

🆙「Make Mistakes to Learn Haskell!」自体のアップデート方法

現状、当入門はまだまだ完成度が低いため、今後も度々更新することとなります。
アップデートが必要な場合は、👆の手順でgit cloneしたディレクトリーに移動した上で、

git pull
stack install

を実行してください。

⚙️使い方

  1. 課題の一覧を表示する(特に引数を与えなければ一覧が表示されます)
    mmlh
    
  2. 課題1の内容を表示する
    mmlh show 1
    
  3. 課題の回答をテストする
    (最後にmmlh showした課題のテストをする)
    mmlh verify your_answer.hs
    

開発に協力していただける方へ

現状

問題を表示したり、ユーザーが与えた回答を判定するための基本的なフレームワークはできています。
現在はひとまずHaskell Day 2018のハンズオンのセッションを少しでも充実させるために、下記のことに取り組んでします。

  • 計算アプリケーションを作る(概要)に書いた目標に従い、課題とその判定処理の実装。
    • 「そのために以下の課題を解いて、Haskellの初歩を身につけましょう」以降に書いた各課題とその判定処理を実装します。
    • 時間がなさそうなので、すべての課題を作り切ることを優先させるつもりはありません(でも課題の数を増やさないとハンズオンの当日に時間が余る恐れがあるのでそこは考慮しよう。最悪別のスライドで穴埋めする)。
  • その他Issuesをご覧ください。

課題におけるプロンプト表記について

  • GHCi に対する入力は ghci>
  • シェルに対する入力は shell>

と書きましょう。

特に私 igrepが行いたいこと

  • 課題の内容とその文章を書く

特に私 igrep以外にやっていただきたいこと

  • 課題の判定処理の実装。
    • ヒントの出し方を含みます。詳細は次のセクションをご覧ください。
  • その他Issuesに書いたこと。
課題の判定処理の実装方法

主に編集するファイルはsrc/Education/MakeMistakesToLearnHaskell/Exercise.hsです。
このファイルに各課題の判定方法や、ヒントの判定処理がすべてまとまっています。
文字列まわりで共通化できる処理を追加したくなったら、Exercise.hsに直接追加するか、src/Education/MakeMistakesToLearnHaskell/Evaluator/以下にファイルを追加するのが良いかと思います(おいおいRegex.hsというファイルを追加します)。

課題の判定処理のテストを書く場合は、test/Education/MakeMistakesToLearnHaskell/ディレクトリーに、ExerciseNSpec.hsNは整数)という名前のファイルを追加してください。
具体的なテストの書き方は既存のファイルを見ていただくとわかるかと思います。Hspecを使っています。

注意事項

  • このアプリケーションは、Haskellの初心者でもソースコードを編集できるよう、できるだけ素朴なHaskellで書くことを目指しています。
    具体的な基準は適宜議論しようと思いますが、現状は例えば
    • 使用方法が比較的分かりやすい(かつ必要性が高い)default-extensionsに記載した言語拡張のみを使う
    • いわゆる ReaderT IO パターンを使用せず、 Env を受け取る関数を全体で使用する
      • Monad Transformerを極力使わない(局所的には使うかも)
    • 型レベルプログラミングをしない
  • その一方、CPPを使うことでimportsrc/imports/external.hsにまとめる、というかなり変わったことをしています。
    これは、コードベース内でimportの書き方を統一する、同じimportを何度も書かないで済ますために考えた方策です。
    現状、external.hsで外部のパッケージのimportのみをまとめていますが、今後もっとコードベースが大きくなったとき、レイヤーを分ける際にも役立つでしょう。
    そのため、今後も少なくとも外部のパッケージを新たにimportする際は、必ずsrc/imports/external.hs書いてください。

ターゲット

  • プログラミングは他の言語で経験している。
  • 他のHaskell入門書を読んでみたが、Haskellでプログラムを書く方法がわからない。
    • TODO: にしては今の内容はちょっと初歩的すぎるかもしれないので、このターゲット自体かexerciseの内容を改めよう
  • Haskellがどんな言語か、どうやってプログラムを作るのか、軽く知りたい。

依存ライブラリ