2016-04-22 14 views
6

sto attraversando some Haskell documentation, e ha trovato la dichiarazioneCome utilizzare il tipo di costruzione in forma infissa

È possibile dichiarare un costruttore (sia per il tipo di dati e) di essere un operatore infisso, e questo può rendi il tuo codice molto più leggibile.

io sono in grado di utilizzare costruttore di dati in forma infissa come di seguito:

Prelude> data List a = Empty | a :-> (List a) deriving Show 
Prelude> 
Prelude> let var1 = 10 :-> Empty 
Prelude> let var2 = 20 :-> var1 
Prelude> let var3 = 30 :-> var2 
Prelude> 
Prelude> var1 
10 :-> Empty 
Prelude> 
Prelude> var2 
20 :-> (10 :-> Empty) 
Prelude> 
Prelude> var3 
30 :-> (20 :-> (10 :-> Empty)) 

La mia domanda è come utilizzare il tipo di costruzione in forma infissa, Qualcuno mi può dare un esempio per capire questo?

+0

'Int \' O \ 'STRING'? –

risposta

7
> :set -XTypeOperators 
> data a :-> b = C (a -> b) 
> :t C id 
C id :: b :-> b 

Ricordate che il suo nome deve iniziare con : (grosso modo, : è considerato "maiuscola").

In caso contrario, utilizzare i backtick, come in a `T` b.

4

Per espandere sulla risposta @ di chi, con le versioni più recenti GHC, la sintassi di TypeOperators è cambiato un po ': i nomi costruttore di tipo che altrimenti sarebbero infissa tipo nomi delle variabili (ad esempio simboli senza un leader :) sono ancora classificate come tipo costruttore nomi, vale a dire i seguenti lavori di codice e definisce un tipo di infisso costruttore +:

{-# language TypeOperators #-} 

data a + b = L a | R b 
Problemi correlati