Sono curioso delle obiezioni a implicit parameters discusse nell'articolo Functional Pearl: Implicit Configurations di Kiselyov e Shan.I parametri impliciti sono una difficoltà per l'inlining in GHC?
Non è valido per il codice inline (β-reduce) in presenza di parametri impliciti.
Davvero? Mi aspetto che GHC debba essere inserito nello stesso scope del parametro implicito passato, no?
Credo di capire la loro obiezione che:
il comportamento di un termine può cambiare se si aggiunge la sua firma, rimosso o modificato.
documentazione per l'utente del GHC spiega che i programmatori devono fare attenzione intorno polymorphic recursion e monomorphism restriction. Questo è in qualche modo cosa intendono per problema di inlining?
Suppongo che questo esempio di ricorsione polimorfica copra cosa intendano per "generalizzazione sui parametri impliciti" pure? Qualunque altra cosa?
La classe di tipoda Data.Reflection è davvero una soluzione ragionevole a queste difficoltà? Apparentemente deserializza l'intera struttura implicita dei dati ogni volta che si accede, il che può sembrare disastroso per le prestazioni. Potremmo per esempio volere che le nostre informazioni implicite siano una tabella di Cayley o una tabella di caratteri che occupa un gig di ram e deve essere accessibile durante milioni di operazioni algebriche.
C'è forse una soluzione migliore che utilizza parametri impliciti, o un'altra tecnica che il compilatore può facilmente ottimizzare, dietro le quinte, garantendo ancora di più tramite il sistema di tipi utilizzando thread di stato o altro?
Ahh dolce, quindi 'Data.Reflection' è tutto nero magico ora. :) C'è qualche codice o articoli che consigli di leggere? 'Data.Reflection' ha già più senso ora che noto la directory degli esempi. Dovrei leggere un'altra cosa su 'Data.Tagged' e' Data.Proxy' però. –