2013-10-05 17 views

答えて

22

名の英数字で構成され、デフォルトで接頭ある機能、および+,>$などの文字で構成された関数は、デフォルトではインフィックスです。たとえば、同じ

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

は、コンストラクタに適用されるように中置関数を定義することができます(編集:@ChrisTaylorが正しく述べたように、制限が中置コンストラクタの名前は:で開始する必要がありますということ)。

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

あなたにも

同じを持っているでしょう
data Rose a = RoseCtr a [Rose a] 

として通常に見えるのコンストラクタを作成することができます。ライン

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

:> 2つの引数を取るコンストラクタであることを意味しタイプ。場合によっては、インフィックス関数/コンストラクタはより直感的で、コードをより理解しやすくします。

+2

infix型のコンストラクタは:で始まり、TypeOperators言語プラグマが必要であることを追加する必要があります。 –

+1

@ChrisTaylor:ありがとう、あなたは結腸についてはかなり正しいですが、プラグマについては確かですか? GHC 7.6.3はそれを必要としていないようです。 – fjarri

+0

説明をありがとう!しかし、私は演算子を得ることはありません:>はしますか?それは特殊な演算子か作成されたものですか? (オペレータは何をしていますか?) – Skyfe