Nel discorso di Edward Kmett Lenses, Folds, and Traversals, sullo scivolo "Il potere è nella Dot", egli mostra il tipo di (.) . (.) . (.)
èCome inferire manualmente il tipo di '(.). (.). (.) '?
(a -> b) -> (c -> d -> e -> a) -> c -> d -> e -> b
posso vedere, mostrando il suo tipo in GHCI. Ma mi piacerebbe anche sapere perché. L'altra cosa che vorrei capire è il motivo per cui c'è il modello nel cambiamento regolare dei parametri da (.)
a (.) . (.)
e (.) . (.) . (.)
:
(.) :: (a -> b) -> (c -> a) -> c -> b
(.) . (.) :: (a -> b) -> (c -> d -> a) -> c -> d -> b
(.) . (.) . (.) :: (a -> b) -> (c -> d -> e -> a) -> c -> d -> e -> b
P.S. Ho provato a risolvere me stesso (.) . (.)
espandendo la definizione di funzione di (.) . (.)
. Dopo aver applicato la definizione di (.)
ho ottenuto:
\x y z t -> x ((y z) t)
Così ho dedotto i tipi:
x :: a -> b
y :: c -> d -> a
z :: c
t :: d
Tuttavia mi sono perso il (.) . (.) . (.)
. E non so se questo è il modo giusto per fare inferenza di tipo manuale.
La vista "composizione combinatoria" di "editor di effetti semantici" potrebbe essere simile alla funzione, dove rinominiamo '(.)' A 'result'. L'intuizione data in [questo post] (http://conal.net/blog/posts/semantic-editor-combinators) è abbastanza carina e, a mio parere, rende molto chiaro il perché impilare le composizioni di '(.)' i tipi che fa. –
@DanielWagner, grazie per il link. Lo leggerò presto. In realta 'stavo per' combinatori di editor semantico 'su google come Edward ne parlava molto nel discorso. –