ガードの前にスペースを追加するだけで、コードは正常に機能します。
pow1 b e
| (e == 0) = 1
| otherwise = b * pow1 b (e-1)
(user142019はすでにこの解決策を述べていますが、解決策を理解するには説明が必要だと感じました)
説明:
Haskell はスペースインデントを使用して、コードの構造とスコープを制御します。他のプログラミング言語 (Java など) はこれを行うために中括弧に依存していますが、Haskell には代わりにインデントがあります。
Haskell は、関数本体が関数定義よりも深いインデント レベルにあり、他の関数定義が同じレベルにあると想定しているため、コードが機能しません。同じインデント レベルの新しい行は新しい関数定義として解釈されようとしますが、ガードで開始することは許可されていない|
ため、解析エラーが発生します。
Mac の文字キーやテキスト エディターに問題はありません。
インデントのトピックについて: タブは機能しません。そのため、スペースを手動で入力するか、エディターのタブ設定を変更して、タブ文字の代わりに 4 つのスペース (推奨) を挿入する必要があります。(たとえば、Notepad++ ではこれが可能です。Haskell で使用する場合は、これを選択するのが私の好みです)。