为什么这个缩进错了?

rog*_*rgl 3 haskell

此代码提供以下编译错误:

Error:(17, 1) ghc: parse error (possibly incorrect indentation or mismatched brackets)
Run Code Online (Sandbox Code Playgroud)

但如果我删除

module Main where
Run Code Online (Sandbox Code Playgroud)

有用.由于我刚刚开始使用Haskell,我想知道为什么?

module Main where

{-# LANGUAGE QuasiQuotes #-}

import Text.Hamlet (shamlet)
import Text.Blaze.Html.Renderer.String (renderHtml)
import Data.Char (toLower)
import Data.List (sort)

data Person = Person
    { name :: String
    , age  :: Int
    }

main :: IO ()
main = putStrLn $ renderHtml [shamlet|
<p>Hello, my name is #{name person} and I am #{show $ age person}.
<p>
    Let's do some funny stuff with my name: #
    <b>#{sort $ map toLower (name person)}
<p>Oh, and in 5 years I'll be #{show ((+) 5 (age person))} years old.
|]
  where
    person = Person "Michael" 26
Run Code Online (Sandbox Code Playgroud)

jam*_*idh 10

这条线

{-# LANGUAGE QuasiQuotes #-}
Run Code Online (Sandbox Code Playgroud)

应该是以前在该计划的第一行

module Main where
Run Code Online (Sandbox Code Playgroud)

这些语言扩展应该是元信息,在程序本身外部(它们也可以作为命令行选项包含在ghc中).

  • 这个.如果存在`LANGUAGE`编译指示,则它必须始终是文件中的*first*行代码.(可能有其他人,但我想不出任何副手.) (3认同)