1. ホーム
  2. haskell

[解決済み] GHCiの複数行コマンド

2022-04-28 09:12:23

質問

ghciで複数行のコマンドを入力する際に問題があります。

次の2行のコードは、ファイルから動作します。

addTwo :: Int -> Int -> Int
addTwo x y = x + y

しかし、ghciで入力すると、エラーが発生します。

<interactive>:1:1: error:
    Variable not in scope: addTwo :: Int -> Int -> Int

の中にコードを入れてもみました。 :{ ... :} が、この例では、行を1行に追加しているだけなので、これもうまくいきません。

WinGHCi(バージョン2011.2.0.1)を使用しています。

解決するには?

ほとんどの場合、型推論を利用してシグネチャを作成することができます。あなたの例では、次のようにすれば十分です。

Prelude> let addTwo x y = x + y

もし、どうしても型署名付きの定義が必要な場合や、定義が複数行にまたがる場合は、ghciでこれを行うことができます。

Prelude> :{
Prelude| let addTwo :: Int -> Int -> Int
Prelude|     addTwo x y = x + y 
Prelude| :}
Prelude> addTwo 4 7
11

なお、これを1行にまとめることもできます。

Prelude> let addTwo :: Int -> Int -> Int ; addTwo x y = x + y

ghci との対話の詳細については プロンプトでの対話式評価 のセクションをご覧ください。