私はNumeric.FADライブラリが必要ですが、それでも存在するタイプに完全に困惑しています。「推測される型は予想よりも多型性が低い」とは何ですか?
これはコードです:
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
エラーが」今度は現在NetworkStateを取るために無名関数を生成diff_opで走っリーダーモナドと、FAD.gradと詰め込むからの差動入力で動作しますそれらをリーダーに追加します。
ハスケル以下で私を混乱させる:
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
いいえ、申し訳ありません。私はタグ型変数の目的が何であるか分かりません。 Numeric.FADをどうやって処理するのですか?私が必要とするのは派生です。 – Astro
FADが使用する「タグ付け」については、http://thread.gmane.org/gmane.comp.lang.haskell.cafe/22308/を参照してください。私はNumeric.FADをインストールしていないので、あなたのコードをかなり再構築するのに自信を持って手伝ってくれません。おそらく、その記事のヒントとともに、自分自身で試してみることができますか? – ephemient