2011-01-04 18 views
10

Ho esaminato i framework web Haskell come Snap e Yesod. La maggior parte sembra implementare un approccio MVC-ish che mi ricorda i framework web come Ruby on Rails. Sì, MVC può essere raggiunto con FP, ma IMHO non mostra i grandi vantaggi di un approccio FP. Poiché HTTP è un protocollo stateless, avrei sperato che potesse esserci un framework Haskell che adottasse un approccio funzionale più originale e più puro. Ci sono?Esistono altri web framework Haskell più originali e funzionali?

+9

HTTP può essere stateless, ma le app Web non lo sono. –

+1

Bene, le applicazioni web simulano lo stato tra richieste con cose come lo stato di sessione, ma c'è un piccolo motivo intrinseco per avere uno stato. È solo che gli sviluppatori sono così abituati a cercare di risolverlo in questo modo (come usare le sessioni lato server) –

+1

@WardB: le sessioni lato server offrono risparmi di sicurezza/larghezza di banda che sarebbero più difficili da ottenere se ogni singolo pezzo di dati fosse scaricato in il cliente e dovevano essere ritrasmessi ad ogni richiesta. Ovviamente, con l'arrivo di HTML5, la memorizzazione dei dati di sessione sul lato client potrebbe diventare più semplice grazie al db sqlite incorporato; non risolve la domanda di sicurezza, ovviamente. Ancora una domanda interessante :) –

risposta

9

Non sono sicuro di quali funzioni in FP desideri utilizzare un framework, ma penso che Yesod utilizzi alcune funzionalità per ottenere grandi vantaggi. (Happstack fa pure, ma non sono altrettanto familiarità con esso.)

  • URL type-safe eliminare un'intera classe di bug typo-generato, oltre che fare automaticamente con la convalida di ingresso.

  • La corretta digitazione elimina praticamente gli attacchi XSS.

  • A seconda della portata dei dati con cui si ha a che fare, utilizzando STM o MVars per le esigenze di archiviazione è facile evitare condizioni di gara e deadlock nelle applicazioni multi-thread.

Sono sicuro che c'è molto di più che non sto pensando, ma spero che fa il punto. Ma forse quello che stai cercando è qualcosa di simile a un quadro basato sulla continuazione. Personalmente ritengo che siano una cattiva idea (sono un credente in REST), ma suppongo che potrebbe sembrare più "funzionale".

+0

Grazie per la risposta. La mia comprensione delle continuazioni è che in realtà riguarda molto lo stato. L'uso del modello nello sviluppo del Web cerca di ottenere un ambiente statico simulato. –

+0

La migliore risposta finora. –

2

Dipende da ciò che stai cercando di ottenere. Se per apolide in realtà si intende senza stato, utilizzo la struttura dei modelli Hakyll per generare pagine statiche. Ha una struttura interessante per gestire le dipendenze e gli aggiornamenti dei file.

+0

Non intendevo pagine statiche. Semplicemente nessuno stato condiviso tra richieste/risposte o effetti collaterali –

+0

Se non ci sono stati condivisi e nessun effetto collaterale ... Cosa puoi fare che le pagine statiche non possono? – Carl

+0

@Carl: il contenuto della pagina potrebbe essere generato dinamicamente fermo (in base ai parametri della richiesta). –

1

Stavo cercando lo stesso, ma non l'ho trovato davvero. Nello specifico, stavo cercando un approccio continuativo che rendesse inutili le sessioni HTTP tradizionali. Questi tipi di framework sono abbastanza popolari in Scheme. Il più vicino che ho trovato è stato la risposta di Chris Eidhof per l'Arc sfida: -

https://gist.github.com/260052

Si tratta di un prototipo abbozzato e probabilmente molti mesi-uomo a partire da essere qualcosa che si potrebbe usare per un lavoro serio. Se le mie abilità Haskell fossero migliori, potrei essere tentato di provare a svilupparlo.

Credo anche che WASH abbia adottato questo approccio ma sembra che sia morto. Sto fissando le mie speranze sulla mysnapsession in quanto ritengo che stia guardando anche a una sessione basata su continuazioni che sarebbe entusiasmante perché sono rimasto molto impressionato dalla qualità del resto di Snap e dal suo slancio.

2

Penso che WardB chiedesse non sui tipi di fantasia, ma piuttosto sulla semantica denotativa/stateless di FP, in contrasto con la semantica imperativa/non-condizionale (e spesso non deterministica) di cose come IO e STM. È questo aspetto denotativo che supporta il ragionamento trattabile preciso &. Il termine "funzionale" è stato allungato per abbracciare anche la programmazione imperativa/non-limitativa, che spesso porta alla confusione. Peter Landin recommended sostituendo "funzionale" con "denotativo" per chiarire esattamente questo tipo di confusione.

Non conosco alcun framework web Haskell denotativo (non utile). Arrivarci avrebbe probabilmente bisogno di rompere alcune abitudini mentali imperative di vecchia data. Vale a dire: lavoro interessante!

Problemi correlati