20

次のコードの「:>」コンストラクターの意味を知っている人はいますか?

data Rose a = a :> [Rose a]
    deriving (Eq, Show)
4

1 に答える 1

31

Haskell では、名前が英数字で構成される関数はデフォルトでプレフィックスであり、+>などの文字で構成される関数はデフォルトで$インフィックスです。たとえば、次のような中置関数を定義できます。

Prelude> let a $%^ b = a + b
Prelude> :t ($%^)
($%^) :: Num a => a -> a -> a

コンストラクターにも同じことが当てはまります(編集:@ChrisTaylorが正しく指摘したように、中置コンストラクターの名前はで始まる必要があるという制限があり:ます)。この線

Prelude> data Rose a = a :> [Rose a]

:>これは、2 つの引数を取るコンストラクタであることを意味します。

Prelude> :t (:>)
(:>) :: a -> [Rose a] -> Rose a

次のように、通常のコンストラクタを作成することもできます。

data Rose a = RoseCtr a [Rose a]

これは同じタイプになります。場合によっては、中置関数/コンストラクターがより直感的で、コードがより理解しやすくなります。

于 2013-10-05T11:49:26.600 に答える