[解決済み] Haskellにはなぜ "data "と "newtype "があるのですか?重複] [重複] [重複
質問
のようです。
newtype
の定義は、単に
data
の定義は、いくつかの制約(たとえば、コンストラクタはひとつだけ)に従っており、この制約のためにランタイムシステムが
newtype
の方が効率的です。また、未定義の値に対するパターンマッチングの扱いが若干異なります。
しかし、Haskellが
data
の定義はなく
newtype
あるデータ定義がこれらの制約に従うかどうかをコンパイラが自分で調べて、自動的にもっと効率的に処理することはできないのでしょうか?
何か見落としている、深い理由があるに違いない。
解決方法は?
両方
newtype
とシングルコンストラクタの
data
は1つの値コンストラクタを導入していますが
newtype
は strict であり
data
は遅延です。 ですから、もし
data D = D Int
newtype N = N Int
次に
N undefined
は、次のように等価です。
undefined
となり、評価されるとエラーになります。 しかし
D undefined
は
ではない
と同じです。
undefined
であり、中を覗こうとしない限りは評価できる。
コンパイラが勝手に処理できないか。
これは、プログラマがコンストラクタをstrictにするかlazyにするかを決定するケースです。 コンストラクタをいつ、どのように厳格化するか、あるいは遅延させるかを理解するには、私よりもずっと遅延評価について理解している必要があります。 私はこの報告書にある考え、つまり
newtype
は、既存の型の名前を変更するために存在するものです。
newtype Feet = Feet Double
newtype Cm = Cm Double
と同じように動作します。
Double
しかし、コンパイラはこの2つを混同させないことを約束しています。
関連
-
[解決済み] Haskell - Ord aの型は何を意味するのでしょうか?
-
[解決済み] Haskellバイナリツリー
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] Project Eulerとの速度比較。CとPythonとErlangとHaskellの比較
-
[解決済み】type()とisinstance()の違いは何ですか?)
-
[解決済み】Haskell の `data` と `newtype` の違いについて
-
[解決済み] ghciで関数を複数行に渡って定義するには?
-
[解決済み】Haskellの入門編
-
[解決済み] Haskellでグラフはどのように表現するのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】なぜパースエラーになるのか?インデント?
-
[解決済み】Haskellでの挿入ソート
-
[解決済み] エラー haskell: スコープ内にありません。どういう意味ですか?
-
[解決済み] なぜHaskellでは整数の割り算ができないのか?
-
[解決済み] Haskellです。パターンでのパースエラー
-
[解決済み] Haskellバイナリツリー
-
[解決済み】Haskell の `data` と `newtype` の違いについて
-
[解決済み] IntとIntegerの違いは何ですか?
-
[解決済み] Haskellのリストを参照する際の「@」記号の意味は?
-
[解決済み] GHCでコンパイルした小さなHaskellプログラムを巨大なバイナリにする