回答:
GHCi 7.x以前let
では、その中で物事を定義するためにが必要です。
Prelude> let f x = x * 2
Prelude> f 4
8
GHC 8.0.1以降、トップレベルのバインディングがGHCiでサポートされているため、OPのコードは変更なしで機能します。
GHCi, version 8.0.1.20161213: http://www.haskell.org/ghc/ :? for help
Prelude> f x = x * 2
Prelude> f 4
8
Haskellソースファイルに入力すると、
f x = 2 * x
正しい。
ghciに直接入力する場合let
は、行の先頭に入力する必要があります。
let f x = 2 * x
let
。GHCiを1つの大きなlet ... in ...
声明と考えてください。
ghciを使用するための良い目安は、入力するコードはすべてdo-blockセマンティクスに準拠する必要があるということです。つまり、構文上、IOモナド内でプログラミングしていると想定できます(これが新しい用語の場合でも、心配しないでください。このチュートリアルを一読することを強くお勧めします)。
この回答は、この点を例で示しており、IOとghciの性質についてのより実用的な洞察を提供する可能性があります。
let
。私は「wtf、なぜ使用しなければならないのか」のようでしたが、let
これを読んで啓発されました。
let
、その例にはありません