2012-03-21 28 views
12

Chiesa codifica (aka pattern Visitor) è un modo di rappresentare i dati come funzioni: invece diragioni pratiche per Сhurch codifica

data T = C1 F1 F2 | C2 F3 F4 

è possibile definire

data T = T (forall r. (F1 -> F2 -> r) -> (F3 -> F4 -> r) -> r) 

. Sebbene la capacità di rappresentare qualsiasi cosa come una funzione sia buona, ho sempre pensato che fosse preferibile la prima versione perché è più pulita e non richiede estensioni di lingua (esplicita forall). Tuttavia, a volte è possibile trovare dati codificati da una chiesa in librerie pubbliche. Quali sono i vantaggi dell'utilizzo di questo?

Gli esempi di codifica chiesa in biblioteche pubbliche:

risposta

7

Ciò corrisponde a continuation-passing style con più continuazioni, e è fatto per le prestazioni: la costruzione esplicita e la distruzione dei dati vengono evitate, passando invece il controllo direttamente in base all'output del pattern match che sarebbe stato eseguito immediatamente. Questo non sempre si traduce in un miglioramento delle prestazioni, ma quando lo fa può essere abbastanza significativo.

In pratica, è possibile considerarlo come dati vs. controllo. Se quello che stai facendo è essenzialmente simile al controllo in natura - come i rami di successo e fallimento di un parser - allora la rappresentazione basata sul controllo potrebbe essere superiore. Altrimenti, mantieni i dati.