1

我看到两个表情

data BinTree a = BTNil | BTNode a (BinTree a) (BinTree a) deriving Show

data Day = Sunday | Monday | Tuesday | Wednesday
         | Thursday | Friday | Saturday         deriving (Enum)

我在推导后应该使用括号时感到困惑。我知道我们应该在有多个类的地方使用括号和逗号。

4

1 回答 1

6

在每个合理的用例中,两者之间没有区别。

... deriving (A)
... deriving  A

是完全等价的。正如您已经正确指出的那样,如果您有多个要派生的类,则括号是必需的。就个人而言,我总是包含括号,只是为了保持一致性。但这完全是一种风格选择,只要你保持一致,这并不重要。


为了绝对完整,在技术上存在一种必要的情况。如果由于某种原因您有一个类型类是运算符名称,则需要提供括号以使其工作。

{-# LANGUAGE TypeOperators, MultiParamTypeClasses,
    GeneralizedNewtypeDeriving #-}

class (:+) a

-- newtype Foo a = Foo a deriving   :+   -- Definitely a syntax error
-- newtype Foo a = Foo a deriving  (:+)  -- Confuses the parser (error)
newtype Foo a    = Foo a deriving ((:+)) -- Works
于 2018-07-10T22:55:35.567 回答