haskell-jp / beginners #19 at 2021-11-27 22:43:05 +0900

質問連投すみません.
こちらをMain.hsに入力しました:
hoge 0 = 0
hoge 1 = 1
hoge x = hoge (x-1) + hoge (x-2)

REPLを起動してロードしても,定義されていないことになっており,行き詰まってしまいました...
Resolving dependencies...
Build profile: -w ghc-8.10.4 -O1
In order, the following will be built (use -v for more details):
 - fake-package-0 (lib) (first run)
Configuring library for fake-package-0..
Preprocessing library for fake-package-0..
Warning: No exposed modules
GHCi, version 8.10.4:   :? for help
Loaded GHCi configuration from /var/folders/xq/fpvgsjwd3ms24_w3lwl_4d780000gn/T/cabal-repl.-18964/setcwd.ghci
Prelude> :l Main
[1 of 1] Compiling Main             ( Main.hs, interpreted )
Ok, one module loaded.
Prelude> hoge 5

<interactive>:2:1: error: Variable not in scope: hoge :: t0 -> t
Prelude> 

うまくいくはずに思えます。

Main モジュールがロードできているので、ghci から見えないディレクトリに Main.hs があるというわけでもなさそうですし。

それでも考えられるのは、 Main.hs に実は hoge が定義されていないことぐらいですかね…

:browse MainMain モジュールに定義されているものが表示されるので、これを確認してみてはどうでしょうか?
1つ気になるのは、Main.hs のロードに成功したらプロンプトが *Main> になる気がしますが、ここでは Prelude> のままである点ですね。
おかしいなと思うのですが、どういうことなのかはちょっとわからないのですけど…
cabal replで読み込むファイルにmodule宣言がないとそういう挙動になるようですね。読み込むファイルに module Main where と書くか素の ghci コマンドを使うとうまくいきます。理由までは分かりませんが…。
モジュール名ではなくファイル名として指定したらどうでしょうか。 :l Main.hs みたいに