为什么我在输入“{”时收到解析错误

Why am I getting parse error on input "{"

我正在尝试 运行 本教程中的第一个示例:

Call JVM Methods from Haskell

module Main where

{-# LANGUAGE QuasiQuotes #-}
{-# OPTIONS_GHC -fplugin=Language.Java.Inline.Plugin #-}
import Language.Java (withJVM)
import Language.Java.Inline

main :: IO ()
main = withJVM [] [java| { System.out.println("Hello Java!"); } |]

我得到这个错误:

app\Main.hs:8:26: error: parse error on input `{'
  |
8 | main = withJVM [] [java| { System.out.println("Hello Java!"); } |]
  |                          ^

我做错了什么?

{-# LANGUAGE … #-}{-# OPTIONS_GHC … #-} 编译指示需要在 module Main 声明之前定义。否则将无法启用 QuasiQuotes 语言扩展,从而无法理解程序中使用的准引号。

如果安装 inline-java 并将语言编译指示放在 module Main 之前:

{-# LANGUAGE QuasiQuotes #-}
{-# OPTIONS_GHC -fplugin=Language.Java.Inline.Plugin #-}

module Main where

import Language.Java (withJVM)
import Language.Java.Inline

main :: IO ()
main = withJVM [] [java| { System.out.println("Hello Java!"); } |]

它通常应该正确地解释准引号。