Sto cercando di ottenere la mia testa intorno F-algebre, e this article fa un buon lavoro. Comprendo la nozione di una teoria della doppia categoria, ma sto facendo fatica a capire come le F-coalgebre (il doppio delle algebre F) si riferiscono a strutture dati pigre in Haskell.I tipi di dati haskell sono co-algebre di default?
F-algebre sono descritti con un endofunctor con la funzione: F a -> A, che ha un senso se si pensa di F a come espressione, e come il risultato della valutazione che l'espressione, come l'articolo collegato spiega esso.
Essendo il duale di F-algebre, la funzione corrispondente di un F-coalgebra sarebbe un -> F a. Wikipedia dice che F-coalgebras può essere usato per creare strutture dati infinite e pigre. In che modo la funzione a>> F consente di creare strutture dati infinite e pigre? Inoltre, dato che Haskell si trova nel suo nucleo più pigro, la maggior parte dei tipi di dati sono in haskell F-coalgebras anziché in F-algebre? Le algebre F non sono ponderate?
Se i tipi di dati (o almeno quelli che sono capace di dati infinito) si basano su F-coalgebre a Haskell, qual è la a -> F una funzione per gli elenchi, per esempio? Qual è il terminale F-coalgebra per le liste?
Fare una lista infinita [1,2,3,4 ...] potrebbe apparire come questo in Haskell:
list = 1 : map (+ 1) list
Questo uso F-coalgebre in qualche modo? Le strutture di dati infiniti richiedono una nozione di valutazione e ricorsione pigri oltre all'uso di F-coalgebras? Mi sto perdendo qualcosa qui?
Quindi Haskell è incoerente perché consente alle divisioni di produrre una struttura di dati infinita? (portando quindi a piegare una svolta non terminante) –
Spiega in totale/coerente/lingue incomplete di Turing si sentono come generatori: potenziale infinito ma hanno bisogno di un * driver * per muoversi. Haskell è incoerente perché ti consente di trattare le spiegazioni come pieghe (unifica le algebre iniziali e le coalgebre finali) e quindi guida una cosa infinita da sola. Se hai familiarità con i generatori Python, succede una cosa simile quando chiami 'list' su un generatore infinito. –