0

何かを見逃しているに違いありませんが、この不自然な例が機能しない理由がわかりません。

test1 :: Int
test1 = let g = \s -> s + s
            f = \u -> let h = \t -> t + t
                          h' = \v -> v + v
                      in  g (h (h' u))
        in f 1

ghci > 入力 `h'' の解析エラー

ただし、次の同等の部分は問題ありません。

test2 :: Int
test2 = let g = \s -> s + s
            f = \u -> let h = \t -> t + t; h' = \v -> v + v
                      in  g (h (h' u))
        in f 1 

これは私の構文の問題だと思いますが、test1 には何も問題はありません。ありがとう。

編集:問題を見つける正しい方法を指摘してくれてありがとう。vim-haskellConceal プラグインに関係していることが判明しました。別のエディターでコードをコピーして貼り付けて保存し、vim に戻ると、ネストされた let-in ブロックに別のインデントがあることに気付きます。そのプラグインを削除した後は、すべて問題ありません。

編集: このプラグインのコードを簡単に読んでも不適切なものは何も見つからなかったので、このプラグインのせいにするのはやめましょう。おそらく、vim7.3 の「隠蔽」機能が根本的な原因です。でも、暖かくて居心地の良いベッドに行きたいです...

4

1 に答える 1

2

それは機能します。そのコードを実行して、

~ % ghci Hello.hs 
GHCi, version 7.4.1: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
[1 of 1] Compiling Main             ( Hello.hs, interpreted )
Ok, modules loaded: Main.
*Main> test1 
8
*Main> 

\tつまり、コードにタブ文字 ( ) が含まれていないことを確認してください。

于 2013-01-13T01:12:07.457 に答える