F# operator over-loading question
Posted
by jyoung
on Stack Overflow
See other posts from Stack Overflow
or by jyoung
Published on 2010-03-15T21:10:48Z
Indexed on
2010/03/15
21:29 UTC
Read the original article
Hit count: 193
F#
|operator-overloading
The following code fails in 'Evaluate' with:
"This expression was expected to have type Complex but here has type double list"
Am I breaking some rule on operator over-loading on '(+)'?
Things are OK if I change '(+)' to 'Add'.
open Microsoft.FSharp.Math
/// real power series [kn; ...; k0] => kn*S^n + ... + k0*S^0
type Powers = double List
let (+) (ls:Powers) (rs:Powers) =
let rec AddReversed (ls:Powers) (rs:Powers) =
match ( ls, rs ) with
| ( l::ltail, r::rtail ) -> ( l + r ) :: AddReversed ltail rtail
| ([], _) -> rs
| (_, []) -> ls
( AddReversed ( ls |> List.rev ) ( rs |> List.rev) ) |> List.rev
let Evaluate (ks:Powers) ( value:Complex ) =
ks |> List.fold (fun (acc:Complex) (k:double)-> acc * value + Complex.Create(k, 0.0) ) Complex.Zero
© Stack Overflow or respective owner