Adventures in F#--Function Type Inference
Consider this F#:
let Reverse a b = b a
This means: given a and b (whatever they may be) call b as a function with 'a' as the argument. When I compile this and look at it under reflector I get:
public static U Reverse <T, U>(T a, FastFunc<T, U> b)
{
return b.Invoke(a);
}
Its interesting to me that F# is able to contextually deduce that b must be a function call.
That FastFunc<T,U> is not a delegate but it seems to represent a similar concept. I'm not sure why its not a delegate and this seems to limit interoperability with languages (like C#) which use delegates to represent this concept, note to self to investigate this later.
Another thought: That FastFunc is an abstract class means that the implementation of the function need not exist until its called. I don't think this is possible with straight delegates.
This posting is provided "AS IS" with no warranties, and confers no rights.
Comments
Anonymous
September 14, 2007
That's how the pipeline operator is defined: let (|>) x f = f x then you can do myThings |> list.map .... This is pretty much what C# extension methods accomplish, albeit this way is more useful since it can operate on all methods :).Anonymous
September 17, 2007
Is not FastFunc a substitute for the missing UnicastDelegate class? The choice of supporting only MulticastDelegate in the Framework for functions seems to be the problem.Anonymous
September 17, 2007
Jomo Fisher-- Easily my favorite feature of F# so far is the combination of discriminated union and patternAnonymous
September 26, 2007
Hi, as far as I know the reason why F# doesn't use delegates internally is that they are slower (and this is an importan problem in a language where you manipulate with function all the time). However, when writing a public interface for an F# library (that should be "C# compatible") you can (should) use delegates which are also supported in F#.Anonymous
September 27, 2007
Jomo Fisher--This is the next part of the open-notebook series documenting my exploration of F#. Today,Anonymous
September 27, 2007
Jomo Fisher--This is the next part of the open-notebook series documenting my exploration of F#. Today