Ich brauche die Numeric.FAD-Bibliothek, obwohl sie immer noch komplett von existentiellen Typen verwirrt ist.Was ist mit "abgeleiteter Typ ist weniger polymorph als erwartet" zu tun?
Dies ist der Code:
error_diffs :: [Double] -> NetworkState [(Int, Int, Double)]
error_diffs desired_outputs = do diff_error <- (diff_op $ error' $ map FAD.lift desired_outputs)::(NetworkState ([FAD.Dual tag Double] -> FAD.Dual tag Double))
weights <- link_weights
let diffs = FAD.grad (diff_error::([FAD.Dual tag a] -> FAD.Dual tag b)) weights
links <- link_list
return $ zipWith (\link diff ->
(linkFrom link, linkTo link, diff)
) links diffs
error‘ein Leser monadisch läuft in lief durch diff_op, die wiederum eine anonyme Funktion den aktuellen NetworkState und die Differenzeingänge von FAD.grad und stopft aufzunehmen erzeugt sie in den Leser.
Haskell verwirrt mich mit den folgenden:
Inferred type is less polymorphic than expected
Quantified type variable `tag' is mentioned in the environment:
diff_error :: [FAD.Dual tag Double] -> FAD.Dual tag Double
(bound at Operations.hs:100:33)
In the first argument of `FAD.grad', namely
`(diff_error :: [FAD.Dual tag a] -> FAD.Dual tag b)'
In the expression:
FAD.grad (diff_error :: [FAD.Dual tag a] -> FAD.Dual tag b) weights
In the definition of `diffs':
diffs = FAD.grad
(diff_error :: [FAD.Dual tag a] -> FAD.Dual tag b) weights
Nein, tut mir leid. Ich habe keine Ahnung, welchen Zweck die Variablen des Tag-Typs haben. Wie soll ich mit Numeric.FAD umgehen? Alles, was ich brauche, ist Ableitung. – Astro
Siehe http://thread.gmane.org/gmane.comp.lang.haskell.cafe/22308/ für eine Diskussion über das von FAD verwendete "Tagging". Ich habe Numeric.FAD nicht installiert, daher kann ich Ihnen bei der Umstrukturierung Ihres Codes noch nicht helfen. Vielleicht können Sie es selbst ausprobieren, mit Hinweisen aus diesem Artikel? – ephemient