Stavo imparando la programmazione funzionale in Swift tramite Haskell e ho trovato questo interessante concetto di Transducers. Un esempio di codice ha implementato una funzione mapping
che fondamentalmente sputa un Trasduttore, dato che passiamo la regola di trasformazione come parametro.Trasduttori in Swift
Inspired, ho subito tradotto ad un equivalente Swift e questo è quello che ho ottenuto:
func mapping < A, B, C> (f: A -> B) -> (((C,B) -> C) -> ((C,A) -> C)) {
return { r in
return { result, a in
return r(result,f(a))
}
}
}
La mia domanda ora è che notare come la funzione di trasformazione va da A a B ((A -> B)
), ma il trasduttore passa da B ad A (((C,B) -> C) -> ((C,A) -> C)
)? Perché? Sono sicuro che non è una coincidenza, perché quell'ordine conta. Esperti Haskell, chiunque?
Ci è voluto un po 'per ottenere questa risposta. Ho dovuto rinfrescare la mia matematica di ingegneria. Grazie! – avismara