36

新しいタイプを定義しようとすると、ghciでエラーが発生します。

プレリュード>データポイント=PtInt Int
<インタラクティブ>:1:0:入力`data'の解析エラー
Prelude> let data Point = Pt Int Int
<インタラクティブ>:1:4:入力`data'の解析エラー

私は何が間違っているのですか?

4

4 に答える 4

28

titaniumdecoy、GHCi内に「letsquare x = x * x」のようなものを書くことは、モナドlet a = f bdo表記を付けて書くようなものであるというよくある指摘を知ったときに、この種のGHCiミステリーに助けられたことを覚えています-この種の例で言うIO

palindromize :: IO ()
palindromize = do
  a <- readFile "foo.txt"
  let b = reverse a
  putStrLn (a ++ b)

同様に、GHCiで式を再定義すると、表記法で次のようになりますdo。これは完全に正当です。

makeMess :: IO ()
makeMess = do
   a <- readFile "foo.txt"
   let b = reverse a
   putStrLn (a ++ b)
   let b = a
   putStrLn (a ++ b)

そのようなシーケンスの途中でデータ型を宣言する人は誰もいませんが、モジュールの他の場所で宣言します。ある種の理論的な異議があったと私は推測したかもしれませんが、ドンS.の発言は、それがないことを示唆しています。

于 2010-06-27T22:59:45.000 に答える
23

GHC7.4.1以降で可能です。

于 2012-11-07T08:47:01.607 に答える
13

歴史的な参考のために、HBI Haskellインタラクティブ環境では、タイプやクラスなどを含む完全なHaskellをコマンドラインで使用できます。先験的にGHCiが同様に動作できないことはなく、ユーザーはこれをサポートするGHC-APIのフロントエンドを作成できます...

于 2010-06-27T17:05:30.153 に答える
12

ghciでは、対話型入力から型を定義することはできません。代わりに、型定義をファイルに入れ:load、ファイルをghciに入れる必要があります。

于 2010-06-27T06:47:12.963 に答える