2012-01-26 11 views
4

私はhaskellの初心者で、最新のGHCi 2011.2.0.1を使用しています。私が頻繁に直面するひとつの不満は、よくインターネットや書籍の例(公式のhaskell.orgサイトからでも、例えばhttp://www.haskell.org/haskellwiki/State_Monadの例2)がコンパイルされないことです。問題が何であるか把握するために、数回の狩猟と質問の投稿が必要です。 RWHの本の中のいくつかの例でさえ、動作しません。haskellの例がよく働かない

これは、新しいバージョンのhaskellまたはhaskell-platformの問題ですか?言語/プラットフォームが開発中であり、不安定であるか、または例のみが時代遅れですか?いずれにしても、新しい学生が正しい例を見つけて学習するための最良の方法は何ですか?

具体的には、上記の状態モナドの例を修正するのに役立つことができますか?

+0

Haskellの安定バージョンであるHugsを使用する2つのhaskellブックがあることは知っています。多分それを見ていると助けになるでしょう。がんばろう。 – wespiserA

+3

@wespiserA:ハァッか。 Hugsは2006年に最後に更新され、最新のHaskell標準を実装していません。私は変わらないという点で安定していると思いますが、基本的に現代の図書館ではうまくいきません。 – ehird

+5

私が前に言ったように、RWHは間違った時に少なくとも二人の感覚で出てきました。いくつかの大きな変更(例外、MTL /変圧器)の前であったが、いくつかの主要な図書館(例えばattoparsec)よりも優先されるかもしれないし、小さくても重要な変更モナドは変更され移動されました)。これは決して本のノックではありませんが、第2版の著者概念と、言語の変化率についてのご質問(実装され、実践されているように - 仕様とコアは安定しています)と一致しています。 –

答えて

9

この場合、問題は、StateコンストラクタがMonad Transformer Libraryの最新バージョンで削除されていることです。 Stateの使用をgetNextの代わりにstateに置き換えると、プログラムは正常に動作します。 (これはStateStateT Identityと再定義されたためです。つまり、モナド変圧器をモナドモナドに置き換えると、別のデータ型が削除されてしまったからです。これが何であるか分からなければ、心配する必要はありません。 Statestateと置き換える必要があることを意味します)。

Web上の既存の例やRWHの問題のほとんどは、新しいバージョンのライブラリによるものです。 (私はRWHの例の主な問題は、Parsecの例がParsec 2のために書かれていることだと思う、Parsec 3はかなり変更されたので、少なくとも輸入品を追加する必要があるだろう)。

一般に、ハスケルは、最新の有用なリソースが不足していることに苦しんでいます。そのHaskellWikiページはまったく維持されていないようです。 (HaskellWikiは確かに公式のhaskell.orgサイトですが、ページはユーザによって書かれ、管理されているので、wikiにあるものが必ずしも最新のものであるとは限りません)。

Stateを削除したMonad Transformer Libraryのリリースは2010年10月にリリースされました。このため、新しいバージョンではまだ動作しないコードが残っているのは残念です。ありがたいことに、修正は簡単です。

+0

ありがとう、とても助かりました。 2010年のコードの更新がWikiにまだ反映されていないのは実に残念ですが、RWHの本も時代遅れです。新しく生徒には、間違いなくハズクを学ぶための新しい本が必要です。他の本/資料がありますか? – R71

+1

私は[Learn You a Haskell](http://learnyouahaskell.com/)が好きですが(コードには 'State'もありますが)、RWHには何も問題ありません。明らかに、著者は新しい版の作成を検討している。mtl 2とParsec 3は、私が考えることができる最新の入門チュートリアルに影響する唯一の大きな変更であり、両方で動作するコードを取得するための変更は軽微でなければなりません。 – ehird

+1

私はその特定のバグをwikiに修正しました。お気軽にアカウントを取得し、あなたがそれらの間に来るように物事を修正してください。 –

関連する問題