4

「Learn you a Haskell for Great Good」を使用して Haskell の学習を始めたばかりです。私は現在「型と型クラス」の章を読んでいるので、私の知識はかなり..存在しません。保存するたびにファイルをビルド/チェックするSublimeHaskellパッケージでSublime Text 2を使用しています。

問題: 次のような関数型宣言をしようとしています:

funcName :: [Char] -> [Char]

次の警告が表示されます。

警告: Use String Found: [Char] -> [Char] 理由: String -> String

ビルドに失敗しました

String の代わりに Char 配列を使用するのが悪い考えである理由を説明してもらえますか、または考えられる影響などの説明へのリンクを教えてください。

PS 私は C# 開発者です。C ライクな言語での char 配列と文字列の違いを理解しています。

4

3 に答える 3

13

基本ライブラリのどこかに、次の定義があります。

type String = [Char]

と言っていてString[Char]まったく同じことです。どちらを選択するかは、ドキュメントの選択です。私はよく次のように型エイリアスを定義します。

type Domain = ByteString
type UserName = Text

ドキュメントに型を使用することをお勧めします。

また、重要な補足事項として、[Char]は文字配列の型ではなく、文字リストです。実際の配列型もあるので、見分けが重要!

于 2013-01-22T23:58:02.280 に答える
7

Stringは の型エイリアスにすぎないため[Char]、この 2 つの間に実用的なものはありません。単純に読みやすさの問題です。

于 2013-01-22T23:56:14.177 に答える
4

コードで HLint を自動的に実行しているようで、HLint の警告を致命的なエラーとして扱っているようです。HLint の作成者が言うように、 「HLint の出力をやみくもに適用しないでください」。String[Char]まったく同じです。誰もが言うように、どちらが見栄えが良いかという問題です。Stringブロックとして扱いたい連続した文字のリストを操作している場合に使用する傾向があり(ほとんどの場合) [Char]、文字が実行中に組み合わされて意味をなさない場合に明示的に使用します (はるかにまれです)。HLint はすべてのヒントをエラー (修正) と警告 (考える) に分割するため、エラー ヒントで失敗するだけをビルドするのが最善かもしれません。

于 2013-01-23T07:51:13.833 に答える