In object oriented programming, a class is a blueprint to create instances of a type.

  1: // show me all the blueprints -- reflect over some .NET libs
  2: open System
  3: open System.IO
  4: open System.Reflection
  5: 
  6: // some reflection helpers
  7: module Reflect =
  8:   type Info =
  9:     | Types        of Type
 10:     | Fields       of FieldInfo
 11:     | Properties   of PropertyInfo
 12:     | Events       of EventInfo
 13:     | Methods      of MethodInfo
 14:     | Constructors of ConstructorInfo
 15: 
 16:   let getTypes (x : string) = 
 17:     let asm = Assembly.LoadFrom(x) in asm.GetTypes()
 18:     |> Seq.map (fun x -> Types x)
 19: 
 20:   let getType ( x : obj ) : Type =
 21:     let y = x.GetType() in y
 22: 
 23:   let getFields (x : obj) (flags : BindingFlags) =
 24:     let t = getType x in t.GetFields flags 
 25:     |> Seq.map (fun x -> Fields x)
 26: 
 27:   let getProperties (x : obj) (flags : BindingFlags) =
 28:     let t = getType x in t.GetProperties flags
 29:     |> Seq.map (fun x -> Properties x)
 30: 
 31:   let getEvents (x : obj) (flags : BindingFlags) =
 32:     let t = getType x in t.GetEvents flags
 33:     |> Seq.map (fun x -> Events x)
 34: 
 35:   let getMethods (x : obj) (flags : BindingFlags) =
 36:     let t = getType x in t.GetMethods flags
 37:     |> Seq.map (fun x -> Methods x)
 38: 
 39:   let getConstructors (x : obj) (flags : BindingFlags) =
 40:     let t = getType x in t.GetConstructors flags
 41:     |> Seq.map (fun x -> Constructors x)
 42: 
 43:   let getMembers fflags pflags eflags mflags cflags (x : obj) = seq {
 44:     yield! getFields       x fflags
 45:     yield! getProperties   x pflags
 46:     yield! getEvents       x eflags
 47:     yield! getMethods      x mflags
 48:     yield! getConstructors x cflags }
 49: 
 50: // I don't want to type these over and over again
 51: let Static = 
 52:   (   BindingFlags.Static   
 53:   ||| BindingFlags.NonPublic 
 54:   ||| BindingFlags.Public)
 55: let Instance = 
 56:   (   BindingFlags.Instance 
 57:   ||| BindingFlags.NonPublic 
 58:   ||| BindingFlags.Public)
 59: let All = 
 60:   (   BindingFlags.Static   
 61:   ||| BindingFlags.Instance  
 62:   ||| BindingFlags.NonPublic 
 63:   ||| BindingFlags.Public)
 64: 
 65: // A sequence of types from FSharp.Core.dll
 66: let fscore = 
 67:   Reflect.getTypes (@"C:\Program Files (x86)\FSharp-2.0.0.0\bin\FSharp.Core.dll")
 68: 
 69: // Printing all members
 70: fscore
 71: |> Seq.map(fun x ->
 72:   match x with
 73:   | Reflect.Types x -> (Reflect.getMembers All All All All All x),(x.Name)
 74:   | _ -> failwith "wrong type")
 75: |> Seq.iter (fun (x,y) ->
 76:   Seq.iter (fun x ->
 77:     match x with
 78:     | Reflect.Types        x -> printfn "%s\tType: %s"        y <| x.Name
 79:     | Reflect.Fields       x -> printfn "%s\tField: %s"       y <| x.Name
 80:     | Reflect.Properties   x -> printfn "%s\tProperty: %s"    y <| x.Name
 81:     | Reflect.Events       x -> printfn "%s\tEvent: %s"       y <| x.Name
 82:     | Reflect.Methods      x -> printfn "%s\tMethod: %s"      y <| x.Name
 83:     | Reflect.Constructors x -> printfn "%s\tConstructor: %s" y <| x.Name) x )

That should keep your FSI busy for a moment while you read the rest of this post. It’s not a secret that there are quite a few types available to us in .NET and we get a handful or two more when we reference FSharp.Core.dll. A type is just data, and alone it is boring if not a bit useless. Here’s the interesting part though: In F#, functions are types. These function types are still data. To do something interesting, all we need is to give a function some data, and it gives us some new data in return. The data we give to our function can be an Object(s) and/or another function(s), as both are just data.

F# is a functional programming language. When we say ‘functional’ we are talking about a Function (computer science) as much as we’re talking about a Function (mathematics). A function in F# straddles these two definitions quite nicely. No doubt you are familiar with the computer science definition of a Function / Method / Procedure / Subroutine. For this reason I want you to fearlessly broach the mathematical side of F# functions. Or, if you are mathematically inclined but haven’t used F# for mathematical programming… Have a look.

Let’s take a short look at the “anatomy” of an F# function. Really, this isn’t going to be mathematically rigorous. I’m not a mathematician, I’m a programmer. I’m not patient enough to do any hand holding throughout, so I’m just going to show you (unless you already know) the names for things so when we bring them up in later posts (about Gang of Four OOP Design Patterns from the perspective of Functional Programing) we won’t have to stop and explain what they mean.

 84: // Function
 85: let sum   a b = a + b   // val add   : int -> int -> int
 86: let mul   a b = a * b   // val mul   : int -> int -> int
 87: let sqr   n   = mul n n // val sqr   : int -> int

A function relates each element of a “set” with exactly one element of another “set”, which could possibly be the same “set”. Maybe, as programmers, we can get away with saying “class”. I think you will also find that the term ‘relates’ is more useful in the long run over a word like ‘transforms’, at least until later on…

There is a kind of notation we can use to reason about the type of a function in F#. It is called arrow notation. It is easy to read, and after a few exercises and expanding our vocabulary a little it becomes pretty easy to manipulate. To show this off I’m going to need a function that takes a lot of parameters. Are you familiar with the Drake equation? (a more informative and animated infographic is just as entertaining to watch)

 88: // functions are actually curried
 89: let drakeEq R fp ne fl fi fc L : float = 
 90:   (float R) * fp * ne * fl * fi * fc * (float L)

There are a lot of Objects and Arrows in this particular function’s signature. Good, because I want to show you what a curried function actually means. Place your mouse cursor over the function name drakeEq on line 89 and observe the signature:

\(drakeEq : int \rightarrow float \rightarrow float \rightarrow float \rightarrow float \rightarrow int \rightarrow float\)

This arrow notation may seem arcane to you, but it is necessary due to the fact that function parameters are implicitly curried. This signature corresponds with the lambda beginning at line 92 and ending at line 98. This arrow notation may seem arcane to you, but it is extremely helpful in F# due to the fact that function parameters are implicitly curried. You can use this feature of F# to construct higher order functions. You can pick-apart the parameters and wedge functions into them as long as the algebraic type signatures line up. Here’s how you read that signature: drakeEq is a function that takes an int and a float and a float and a float and a float and an int and returns a float. When reading function signatures, the last type to appear is the type being returned by the function. Any functions taking other functions as parameters will express that in their type signatures by surrounding the input function with parenthesis. For the drakeEq, though, here is what is (sort of) happening behind the scenes:

 91: // like this:
 92: (fun (R  : int  ) ->
 93:  (fun (fp : float) ->
 94:   (fun (ne : float) ->
 95:    (fun (fl : float) ->
 96:     (fun (fi : float) ->
 97:      (fun (fc : float) ->
 98:       (fun (L  : int  ) -> (float R) * fp * ne * fl * fi * fc * (float L))))))))

Hmm… This looks like a bunch of nested lambda expressions. In fact, all but the outer-most of these anonymous functions is wrapped by an outer lambda. This has the same recursive structure as a Linked List does, with the exception that the input values to each one of the lambdas have closure in the nested lambdas.

 99: // recursive data type
100: type 'a LinkedList =
101:   | Empty                                  // aka: nil
102:   | Element of    'a      * 'a LinkedList  // aka: cons
103:               // aka: car   // aka: cdr

Remember that functions are data too, so this means we can recursively deconstruct functions, or recursively construct them and hand them out to be evaluated later, as we do in Continuation Passing Style. We could specify the drakeEq like so:

104: let drakeEq' (R,fp,ne,fl,fi,fc,L) : float =
105:   (float R) * fp * ne * fl * fi * fc * (float L)

This changes the signature to:

\(drakeEq' : int * float * float * float * float * float * int \rightarrow float \)

And we lose the ability to curry the function on each of the inputs. Because the notation (value1,value2) represents a tuple in F# and a tuple is essentially just one composite value. So, the real power behind currying can be harnessed in this way, as well as; Higher Order Functions (HoF), Partial Application, and continuation passing style, for example. Let’s take a look at each one of those concepts.

106: let xs = Element(1, Element(2, Element(3,Empty)))
107: // these signatures compose
108: [1..9]               // int list is usable as an seq<'a>
109: ( |> )               // ('a -> ('a -> 'b) -> 'b)
110: (Seq.filter)         // (('a -> bool) -> seq<'a> -> seq<'a>)
111: (fun x -> x % 3 = 0) // (int -> bool)
112: 
113: // into this higher order function
114: [1..9] |> Seq.filter (fun x -> x % 3 = 0)

The type ‘a is special and stands for a generic type. The type ‘b stands for a generic type that isn’t necessarily the same type as ‘a. The evaluation order for line 114 considers ( |> ) first. The job of ( |> ) is to put the expression on the left into the expression on the right. When the type is evaluated it is inferred to be the type int. So our ‘a here is really standing for int now. The next part that is evaluated is the lambda. Easy to see that its type is (int -> bool) and since ‘a stands for int, it fits nicely into the first parameter of Seq.filter. Seq.filter enumerates our list applying the lambda to each element and returns to us a seq<int> containing the elements [3;6;9].

The compiled representation of an F# function is an instance of the Microsoft.FSharp.FastFunc class. F# functions are not delegates.

116: // partial application
117: let next      = sum 1                         // val next  : int -> int
118: let twice     = mul 2                         // val twice : int -> int
119: let x = let n = 4 in twice <| sqr n + next n  // val it    : int = 42

F# programmers love composability, though these trivial examples do little to expose the great usefulness of these features. To make the most of these features, as you gain experience, you need to become comfortable with the functional arrow notation. Look, you don’t have to be good at math to make use of it, you really only need to know the rules for moving symbols around.

121: // an example of continuation passing style using a (foldBack) catamorphism
122: let foldr f acc xs =
123:   let rec foldr xs k =
124:     match xs with
125:     | Element(x,xs) -> foldr xs (fun racc -> k (f x racc))
126:     | Empty         -> k acc
127:   foldr xs id
128: 
129: // the opposite of foldr (no continuation passing is necessary)
130: let rec foldl f acc xs =
131:   match xs with
132:   | Element(x,xs) -> foldl f (f acc x) xs
133:   | Empty         -> acc
134: 
135: // some higher order functions implemented in terms of folds
136: let identity  xs = foldr (fun x xs -> Element(x,xs)) (Empty) xs
137: let reverse   xs = foldl (fun xs x -> Element(x,xs)) (Empty) xs
138: let length    xs = foldl (fun xs _ -> 1 + xs)           0    xs
139: let summation xs = foldl (fun xs x -> x + xs)           0    xs
140: let product   xs = foldl (fun xs x -> x * xs)           1    xs

Folding is pretty useful and goes a long way to creating elegant and composable programs. You can also call folding a “catamorphism”. Folding is easier to say, but catamorphism is a lot more meaningful, and more general. By the way, the dual of any theorem is also a theorem. If you’ve been using the intellisense on the code to view the signatures of these functions you will notice that a cataomorphism on our LinkedList type is:

\(LinkedList<'a> \rightarrow ‘b\)

To “dualize” this we simply turn the arrow around.

\(‘a \rightarrow LinkedList<'b>\)

Here, we don’t have to worry about the discrepancy between the positions of ‘a and ‘b. They’re equally generic. Intellisense will typically report them in alphabetical order.

142: // the dual of folding,  unfolding
143: let rec unfold unspool finished x = 
144:   match x with
145:   | x when finished x -> Empty
146:   | _ -> let a,y = unspool x in Element(a,unfold unspool finished y)
147: 
148: let fibUntil until = 
149:   unfold (fun x -> let b' = (fst x + snd x) in (b',(snd x, b')))
150:          (fun x -> snd x >= until )
151:          (0,1)
152: 
153: fibUntil 34
154: 
155: let fibs (x : int)  =
156:   let x = ref x in
157:   unfold ( fun x   -> let b' = (fst x + snd x) in (b',(snd x, b')))
158:          ((fun x _ -> if !x = 0 then    true
159:                       else x := !x - 1; false ) <| x)
160:          (0,1)
161: 
162: fibs 10

Unfolding is also useful and goes just as far toward creating elegant and composable programs. You can also call unfolding an “anamorphism”. However, I should let you know that my sloppy blog solutions are no match for what F# provides out of the box. I just wanted an anamorphism over our LinkedList type we defined above. LinkedList already comes with F# as List and a lazy version, LazyList, is available in PowerPack. When unfolding though, we don’t know when we’re going to stop so it is definitely better to use a lazy data structure. F# gives us the Seq module that works with any IEnumerable:

164: // best to use whats already in the framework
165: let fibonacci = Seq.unfold (fun (x, y) -> Some(x, (y, x + y))) (0I,1I)
166: fibonacci |> Seq.nth 10000

Mathematicians don’t like a lot of cruft in their notation, especially when simple symbols will do the trick. A function is like a machine that relates an input to an output. Another way of looking at a function is a sort of dictionary. Where the input is the key, and the output is the value. In fact, I really like that way of looking at things. You cannot have the same key mapping to different values. Neither may a function relate its input to different values (unless these values have been tuple’d into one value!). Notice the similarity here between the F# function signatures:

Signature:
\(f : {N} \rightarrow {N}\)

Implementation:
\(f : x \mapsto x^2\)

Functions usually have a name, but like F# you don’t have to necessarily give them one: \(x = n^2\). There is still an input n and an output y and the relation of squaring.

\(f(x) = x^2\)

We read this as “f of x equals x squared”. Of course x is definately numerical in nature, so in F# it would be like: let inline f (x : ^x) = x * x. A bit more wordy, but computers aren’t as smart as mathematicians so we have to clue them in that ^x here needs to be statically resolved.

Functions have formal rules. It must work every time for every possible input value. It must give the same result for the same input value every time. You can only have one relation for each input value. One-to-many relations are not O.K., but many-to-one relations are just fine. If a relationship doesn’t follow these rules, then it is not a function. These rules are very important in the long run for making educated assumptions regarding the interaction, or rather, the composition of functions in a complex system.

The Domain of a function is it’s spectrum of input. The Codomain is its spectrum of output. The Range of a function is some subset of the codomain, for which the domain relates. A Relationship is the operation performed on the domain to give us a value in the codomain. For instance, using the relation \(x^2\) in the domain of Integers (\({Z}\) then we know that \(f : {Z} \rightarrow {Z}\) is the signature of our function. The \(\mapsto\) in \(f : x \mapsto x^2\) is called “maps to” and maps an integer to another integer. Or, if you prefer to imagine it as a table lookup, it “looks up” an integer value using an integer key. Though the domain and codomain are the same sets, the range of our relation \(x^2\) is a subset of \({Z}\). You do the math on that one.

Functions can come in pieces, called piecewise functions. F# can do piecewise functions using pattern matching syntax. Have a look at the foldr and foldl implementations again. Sometimes you’re matching on the quality of a type instead of a type itself… in that case pattern matching accompanied by Active Patterns will give you the same semantics as piecewise functions in mathematics.

BONUS:

I can imagine a situation where we would want to take from the domain of our Drake equation the most educated guesses we have available to restrict the range to some known quantity. For instance we know for certain there is 1 civilization in our galaxy capable of radio astronomy. Maybe there is more than one educated guess for each of the drake equation’s parameters. There’s really no use in bickering about which one is the better one… after all they’re both estimates and outright guesses, right? We do have a pretty good guess for R, and we can say that N is definately equal to 1. What could the others be? Enter: Solver Foundation.

167: #I "lib"
168: #r "Microsoft.Solver.Foundation.dll"
169: open Microsoft.SolverFoundation.Common
170: open Microsoft.SolverFoundation.Solvers
171: open Microsoft.SolverFoundation.Services
172: 
173: // This wrapper comes with Solver Foundation in the F# Samples
174: #load "SfsWrapper.fsx"
175: open SfsWrapper
176: 
177: // these measure types aren't necessary for this example but were 
178: // used to make it easier to keep track of what the variables in the 
179: // drake equation stand for.
180: [<Measure>] type Year
181: [<Measure>] type Star
182: [<Measure>] type Planet
183: [<Measure>] type LifeCapible = Planet / Planet / Star
184: [<Measure>] type Life = Planet / LifeCapible
185: [<Measure>] type IntelligentLife = Planet / Life
186: [<Measure>] type CommunicatingIntelligentLife = Planet / IntelligentLife
187: [<Measure>] type Civilization
188: 
189: let context = SolverContext.GetContext()
190: let drake   = SfsModel(context)
191: 
192: // optimization variables
193: let R  = drake.CreateRealVariable<Star/Year>()
194: let fp = drake.CreateRealVariable<Planet/Star>()
195: let ne = drake.CreateRealVariable<LifeCapible>()
196: let fl = drake.CreateRealVariable<Life>()
197: let fi = drake.CreateRealVariable<IntelligentLife>()
198: let fc = drake.CreateRealVariable<CommunicatingIntelligentLife>()
199: let L  = drake.CreateRealVariable<Year>()
200: let N  = drake.CreateRealVariable<CommunicatingIntelligentLife 
201:                                     IntelligentLife Life 
202:                                       LifeCapible Planet>()
203: 
204: // none of these should dip below 0.0
205: drake.AddConstraints [|
206:   0.0<_> <<== R;  0.0<_> <<== fp; 0.0<_> <<== ne; 0.0<_> <<== fl;
207:   0.0<_> <<== fi; 0.0<_> <<== fc; 0.0<_> <<== L;  1.0<_> ==== N
208: |]
209: 
210: let cR  = drake.AddConstraint ( R  ====   7.0<_> )
211: let cfp = drake.AddConstraint ( fp <<==   8.0<_> )
212: let cne = drake.AddConstraint ( ne <<==   1.0<_> )
213: let cfl = drake.AddConstraint ( fl <<==   1.0<_> )
214: let cfi = drake.AddConstraint ( fi <<==   1.0<_> )
215: let cfc = drake.AddConstraint ( fc <<==   1.0<_> )
216: let cL  = drake.AddConstraint ( L  <<== 304.0<_> )
217: let cN  = drake.AddConstraint ( N  ==== R * fp * ne * fl * fi * fc * L )
218: 
219: let minimumLifeCapible = drake.AddGoal( GoalKind.Minimize,
220:                                         R * fp * ne * fl * fi * fc * L )
221: 
222: //drake.RemoveGoal(minimumLifeCapible)
223: let solution = drake.Solve(LocalSearch)
224: 
225: // see the results
226: // val it : SolverQuality = LocalOptimal
227: solution.Quality
228: // val it : R  = 7.0
229: R.Value  |> float
230: // val it : fp = 4.341172079
231: fp.Value |> float
232: // val it : ne = 0.06266237088
233: ne.Value |> float
234: // val it : fl = 0.0303299242
235: fl.Value |> float
236: // val it : fi = 0.1318182999
237: fi.Value |> float
238: // val it : fc = 0.7418663017
239: fc.Value |> float
240: // val it : L  = 177.0579602
241: L.Value  |> float
242: // val it : N  = 0.99999999
243: N.Value  |> floatF# Web Snippets
namespace System
namespace System.IO
namespace System.Reflection
type Info = | Types of Type | Fields of FieldInfo | Properties of PropertyInfo | Events of EventInfo | Methods of MethodInfo | Constructors of ConstructorInfo Full name: Arrow-Notation-via-FSharp.Reflect.Info type: Info implements: IEquatable<Info> implements: Collections.IStructuralEquatable
union case Info.Types: Type -> Info
type Type = class inherit System.Reflection.MemberInfo member Assembly : System.Reflection.Assembly member AssemblyQualifiedName : string member Attributes : System.Reflection.TypeAttributes member BaseType : System.Type member ContainsGenericParameters : bool member DeclaringMethod : System.Reflection.MethodBase member DeclaringType : System.Type member Equals : obj -> bool member Equals : System.Type -> bool member FindInterfaces : System.Reflection.TypeFilter * obj -> System.Type [] member FindMembers : System.Reflection.MemberTypes * System.Reflection.BindingFlags * System.Reflection.MemberFilter * obj -> System.Reflection.MemberInfo [] member FullName : string member GUID : System.Guid member GenericParameterAttributes : System.Reflection.GenericParameterAttributes member GenericParameterPosition : int member GetArrayRank : unit -> int member GetConstructor : System.Type [] -> System.Reflection.ConstructorInfo member GetConstructor : System.Reflection.BindingFlags * System.Reflection.Binder * System.Type [] * System.Reflection.ParameterModifier [] -> System.Reflection.ConstructorInfo member GetConstructor : System.Reflection.BindingFlags * System.Reflection.Binder * System.Reflection.CallingConventions * System.Type [] * System.Reflection.ParameterModifier [] -> System.Reflection.ConstructorInfo member GetConstructors : unit -> System.Reflection.ConstructorInfo [] member GetConstructors : System.Reflection.BindingFlags -> System.Reflection.ConstructorInfo [] member GetDefaultMembers : unit -> System.Reflection.MemberInfo [] member GetElementType : unit -> System.Type member GetEnumName : obj -> string member GetEnumNames : unit -> string [] member GetEnumUnderlyingType : unit -> System.Type member GetEnumValues : unit -> System.Array member GetEvent : string -> System.Reflection.EventInfo member GetEvent : string * System.Reflection.BindingFlags -> System.Reflection.EventInfo member GetEvents : unit -> System.Reflection.EventInfo [] member GetEvents : System.Reflection.BindingFlags -> System.Reflection.EventInfo [] member GetField : string -> System.Reflection.FieldInfo member GetField : string * System.Reflection.BindingFlags -> System.Reflection.FieldInfo member GetFields : unit -> System.Reflection.FieldInfo [] member GetFields : System.Reflection.BindingFlags -> System.Reflection.FieldInfo [] member GetGenericArguments : unit -> System.Type [] member GetGenericParameterConstraints : unit -> System.Type [] member GetGenericTypeDefinition : unit -> System.Type member GetHashCode : unit -> int member GetInterface : string -> System.Type member GetInterface : string * bool -> System.Type member GetInterfaceMap : System.Type -> System.Reflection.InterfaceMapping member GetInterfaces : unit -> System.Type [] member GetMember : string -> System.Reflection.MemberInfo [] member GetMember : string * System.Reflection.BindingFlags -> System.Reflection.MemberInfo [] member GetMember : string * System.Reflection.MemberTypes * System.Reflection.BindingFlags -> System.Reflection.MemberInfo [] member GetMembers : unit -> System.Reflection.MemberInfo [] member GetMembers : System.Reflection.BindingFlags -> System.Reflection.MemberInfo [] member GetMethod : string -> System.Reflection.MethodInfo member GetMethod : string * System.Type [] -> System.Reflection.MethodInfo member GetMethod : string * System.Reflection.BindingFlags -> System.Reflection.MethodInfo member GetMethod : string * System.Type [] * System.Reflection.ParameterModifier [] -> System.Reflection.MethodInfo member GetMethod : string * System.Reflection.BindingFlags * System.Reflection.Binder * System.Type [] * System.Reflection.ParameterModifier [] -> System.Reflection.MethodInfo member GetMethod : string * System.Reflection.BindingFlags * System.Reflection.Binder * System.Reflection.CallingConventions * System.Type [] * System.Reflection.ParameterModifier [] -> System.Reflection.MethodInfo member GetMethods : unit -> System.Reflection.MethodInfo [] member GetMethods : System.Reflection.BindingFlags -> System.Reflection.MethodInfo [] member GetNestedType : string -> System.Type member GetNestedType : string * System.Reflection.BindingFlags -> System.Type member GetNestedTypes : unit -> System.Type [] member GetNestedTypes : System.Reflection.BindingFlags -> System.Type [] member GetProperties : unit -> System.Reflection.PropertyInfo [] member GetProperties : System.Reflection.BindingFlags -> System.Reflection.PropertyInfo [] member GetProperty : string -> System.Reflection.PropertyInfo member GetProperty : string * System.Reflection.BindingFlags -> System.Reflection.PropertyInfo member GetProperty : string * System.Type [] -> System.Reflection.PropertyInfo member GetProperty : string * System.Type -> System.Reflection.PropertyInfo member GetProperty : string * System.Type * System.Type [] -> System.Reflection.PropertyInfo member GetProperty : string * System.Type * System.Type [] * System.Reflection.ParameterModifier [] -> System.Reflection.PropertyInfo member GetProperty : string * System.Reflection.BindingFlags * System.Reflection.Binder * System.Type * System.Type [] * System.Reflection.ParameterModifier [] -> System.Reflection.PropertyInfo member GetType : unit -> System.Type member HasElementType : bool member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj [] -> obj member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj [] * System.Globalization.CultureInfo -> obj member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj [] * System.Reflection.ParameterModifier [] * System.Globalization.CultureInfo * string [] -> obj member IsAbstract : bool member IsAnsiClass : bool member IsArray : bool member IsAssignableFrom : System.Type -> bool member IsAutoClass : bool member IsAutoLayout : bool member IsByRef : bool member IsCOMObject : bool member IsClass : bool member IsContextful : bool member IsEnum : bool member IsEnumDefined : obj -> bool member IsEquivalentTo : System.Type -> bool member IsExplicitLayout : bool member IsGenericParameter : bool member IsGenericType : bool member IsGenericTypeDefinition : bool member IsImport : bool member IsInstanceOfType : obj -> bool member IsInterface : bool member IsLayoutSequential : bool member IsMarshalByRef : bool member IsNested : bool member IsNestedAssembly : bool member IsNestedFamANDAssem : bool member IsNestedFamORAssem : bool member IsNestedFamily : bool member IsNestedPrivate : bool member IsNestedPublic : bool member IsNotPublic : bool member IsPointer : bool member IsPrimitive : bool member IsPublic : bool member IsSealed : bool member IsSecurityCritical : bool member IsSecuritySafeCritical : bool member IsSecurityTransparent : bool member IsSerializable : bool member IsSpecialName : bool member IsSubclassOf : System.Type -> bool member IsUnicodeClass : bool member IsValueType : bool member IsVisible : bool member MakeArrayType : unit -> System.Type member MakeArrayType : int -> System.Type member MakeByRefType : unit -> System.Type member MakeGenericType : System.Type [] -> System.Type member MakePointerType : unit -> System.Type member MemberType : System.Reflection.MemberTypes member Module : System.Reflection.Module member Namespace : string member ReflectedType : System.Type member StructLayoutAttribute : System.Runtime.InteropServices.StructLayoutAttribute member ToString : unit -> string member TypeHandle : System.RuntimeTypeHandle member TypeInitializer : System.Reflection.ConstructorInfo member UnderlyingSystemType : System.Type static val FilterAttribute : System.Reflection.MemberFilter static val FilterName : System.Reflection.MemberFilter static val FilterNameIgnoreCase : System.Reflection.MemberFilter static val Missing : obj static val Delimiter : char static val EmptyTypes : System.Type [] static member DefaultBinder : System.Reflection.Binder static member GetType : string -> System.Type static member GetType : string * bool -> System.Type static member GetType : string * bool * bool -> System.Type static member GetType : string * System.Func<System.Reflection.AssemblyName,System.Reflection.Assembly> * System.Func<System.Reflection.Assembly,string,bool,System.Type> -> System.Type static member GetType : string * System.Func<System.Reflection.AssemblyName,System.Reflection.Assembly> * System.Func<System.Reflection.Assembly,string,bool,System.Type> * bool -> System.Type static member GetType : string * System.Func<System.Reflection.AssemblyName,System.Reflection.Assembly> * System.Func<System.Reflection.Assembly,string,bool,System.Type> * bool * bool -> System.Type static member GetTypeArray : obj [] -> System.Type [] static member GetTypeCode : System.Type -> System.TypeCode static member GetTypeFromCLSID : System.Guid -> System.Type static member GetTypeFromCLSID : System.Guid * bool -> System.Type static member GetTypeFromCLSID : System.Guid * string -> System.Type static member GetTypeFromCLSID : System.Guid * string * bool -> System.Type static member GetTypeFromHandle : System.RuntimeTypeHandle -> System.Type static member GetTypeFromProgID : string -> System.Type static member GetTypeFromProgID : string * bool -> System.Type static member GetTypeFromProgID : string * string -> System.Type static member GetTypeFromProgID : string * string * bool -> System.Type static member GetTypeHandle : obj -> System.RuntimeTypeHandle static member ReflectionOnlyGetType : string * bool * bool -> System.Type end Full name: System.Type type: Type implements: ICustomAttributeProvider implements: Runtime.InteropServices._MemberInfo implements: Runtime.InteropServices._Type implements: IReflect inherits: MemberInfo
union case Info.Fields: FieldInfo -> Info
type FieldInfo = class inherit System.Reflection.MemberInfo member Attributes : System.Reflection.FieldAttributes member Equals : obj -> bool member FieldHandle : System.RuntimeFieldHandle member FieldType : System.Type member GetHashCode : unit -> int member GetOptionalCustomModifiers : unit -> System.Type [] member GetRawConstantValue : unit -> obj member GetRequiredCustomModifiers : unit -> System.Type [] member GetValue : obj -> obj member GetValueDirect : System.TypedReference -> obj member IsAssembly : bool member IsFamily : bool member IsFamilyAndAssembly : bool member IsFamilyOrAssembly : bool member IsInitOnly : bool member IsLiteral : bool member IsNotSerialized : bool member IsPinvokeImpl : bool member IsPrivate : bool member IsPublic : bool member IsSecurityCritical : bool member IsSecuritySafeCritical : bool member IsSecurityTransparent : bool member IsSpecialName : bool member IsStatic : bool member MemberType : System.Reflection.MemberTypes member SetValue : obj * obj -> unit member SetValue : obj * obj * System.Reflection.BindingFlags * System.Reflection.Binder * System.Globalization.CultureInfo -> unit member SetValueDirect : System.TypedReference * obj -> unit static member GetFieldFromHandle : System.RuntimeFieldHandle -> System.Reflection.FieldInfo static member GetFieldFromHandle : System.RuntimeFieldHandle * System.RuntimeTypeHandle -> System.Reflection.FieldInfo end Full name: System.Reflection.FieldInfo type: FieldInfo implements: ICustomAttributeProvider implements: Runtime.InteropServices._MemberInfo implements: Runtime.InteropServices._FieldInfo inherits: MemberInfo
union case Info.Properties: PropertyInfo -> Info
type PropertyInfo = class inherit System.Reflection.MemberInfo member Attributes : System.Reflection.PropertyAttributes member CanRead : bool member CanWrite : bool member Equals : obj -> bool member GetAccessors : unit -> System.Reflection.MethodInfo [] member GetAccessors : bool -> System.Reflection.MethodInfo [] member GetConstantValue : unit -> obj member GetGetMethod : unit -> System.Reflection.MethodInfo member GetGetMethod : bool -> System.Reflection.MethodInfo member GetHashCode : unit -> int member GetIndexParameters : unit -> System.Reflection.ParameterInfo [] member GetOptionalCustomModifiers : unit -> System.Type [] member GetRawConstantValue : unit -> obj member GetRequiredCustomModifiers : unit -> System.Type [] member GetSetMethod : unit -> System.Reflection.MethodInfo member GetSetMethod : bool -> System.Reflection.MethodInfo member GetValue : obj * obj [] -> obj member GetValue : obj * System.Reflection.BindingFlags * System.Reflection.Binder * obj [] * System.Globalization.CultureInfo -> obj member IsSpecialName : bool member MemberType : System.Reflection.MemberTypes member PropertyType : System.Type member SetValue : obj * obj * obj [] -> unit member SetValue : obj * obj * System.Reflection.BindingFlags * System.Reflection.Binder * obj [] * System.Globalization.CultureInfo -> unit end Full name: System.Reflection.PropertyInfo type: PropertyInfo implements: ICustomAttributeProvider implements: Runtime.InteropServices._MemberInfo implements: Runtime.InteropServices._PropertyInfo inherits: MemberInfo
union case Info.Events: EventInfo -> Info
type EventInfo = class inherit System.Reflection.MemberInfo member AddEventHandler : obj * System.Delegate -> unit member Attributes : System.Reflection.EventAttributes member Equals : obj -> bool member EventHandlerType : System.Type member GetAddMethod : unit -> System.Reflection.MethodInfo member GetAddMethod : bool -> System.Reflection.MethodInfo member GetHashCode : unit -> int member GetOtherMethods : unit -> System.Reflection.MethodInfo [] member GetOtherMethods : bool -> System.Reflection.MethodInfo [] member GetRaiseMethod : unit -> System.Reflection.MethodInfo member GetRaiseMethod : bool -> System.Reflection.MethodInfo member GetRemoveMethod : unit -> System.Reflection.MethodInfo member GetRemoveMethod : bool -> System.Reflection.MethodInfo member IsMulticast : bool member IsSpecialName : bool member MemberType : System.Reflection.MemberTypes member RemoveEventHandler : obj * System.Delegate -> unit end Full name: System.Reflection.EventInfo type: EventInfo implements: ICustomAttributeProvider implements: Runtime.InteropServices._MemberInfo implements: Runtime.InteropServices._EventInfo inherits: MemberInfo
union case Info.Methods: MethodInfo -> Info
type MethodInfo = class inherit System.Reflection.MethodBase member Equals : obj -> bool member GetBaseDefinition : unit -> System.Reflection.MethodInfo member GetGenericArguments : unit -> System.Type [] member GetGenericMethodDefinition : unit -> System.Reflection.MethodInfo member GetHashCode : unit -> int member MakeGenericMethod : System.Type [] -> System.Reflection.MethodInfo member MemberType : System.Reflection.MemberTypes member ReturnParameter : System.Reflection.ParameterInfo member ReturnType : System.Type member ReturnTypeCustomAttributes : System.Reflection.ICustomAttributeProvider end Full name: System.Reflection.MethodInfo type: MethodInfo implements: ICustomAttributeProvider implements: Runtime.InteropServices._MemberInfo implements: Runtime.InteropServices._MethodBase implements: Runtime.InteropServices._MethodInfo inherits: MethodBase inherits: MemberInfo
union case Info.Constructors: ConstructorInfo -> Info
type ConstructorInfo = class inherit System.Reflection.MethodBase member Equals : obj -> bool member GetHashCode : unit -> int member Invoke : obj [] -> obj member Invoke : System.Reflection.BindingFlags * System.Reflection.Binder * obj [] * System.Globalization.CultureInfo -> obj member MemberType : System.Reflection.MemberTypes static val ConstructorName : string static val TypeConstructorName : string end Full name: System.Reflection.ConstructorInfo type: ConstructorInfo implements: ICustomAttributeProvider implements: Runtime.InteropServices._MemberInfo implements: Runtime.InteropServices._MethodBase implements: Runtime.InteropServices._ConstructorInfo inherits: MethodBase inherits: MemberInfo
val getTypes : string -> seq<Info> Full name: Arrow-Notation-via-FSharp.Reflect.getTypes
val x : string type: string implements: IComparable implements: ICloneable implements: IConvertible implements: IComparable<string> implements: seq<char> implements: Collections.IEnumerable implements: IEquatable<string>
Multiple items val string : 'T -> string  Full name: Microsoft.FSharp.Core.Operators.string -------------------- type string = String Full name: Microsoft.FSharp.Core.string type: string implements: IComparable implements: ICloneable implements: IConvertible implements: IComparable<string> implements: seq<char> implements: Collections.IEnumerable implements: IEquatable<string>
val asm : Assembly type: Assembly implements: Runtime.InteropServices._Assembly implements: Security.IEvidenceFactory implements: ICustomAttributeProvider implements: Runtime.Serialization.ISerializable
type Assembly = class member CodeBase : string member CreateInstance : string -> obj member CreateInstance : string * bool -> obj member CreateInstance : string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj [] * System.Globalization.CultureInfo * obj [] -> obj member EntryPoint : System.Reflection.MethodInfo member Equals : obj -> bool member EscapedCodeBase : string member Evidence : System.Security.Policy.Evidence member FullName : string member GetCustomAttributes : bool -> obj [] member GetCustomAttributes : System.Type * bool -> obj [] member GetCustomAttributesData : unit -> System.Collections.Generic.IList<System.Reflection.CustomAttributeData> member GetExportedTypes : unit -> System.Type [] member GetFile : string -> System.IO.FileStream member GetFiles : unit -> System.IO.FileStream [] member GetFiles : bool -> System.IO.FileStream [] member GetHashCode : unit -> int member GetLoadedModules : unit -> System.Reflection.Module [] member GetLoadedModules : bool -> System.Reflection.Module [] member GetManifestResourceInfo : string -> System.Reflection.ManifestResourceInfo member GetManifestResourceNames : unit -> string [] member GetManifestResourceStream : string -> System.IO.Stream member GetManifestResourceStream : System.Type * string -> System.IO.Stream member GetModule : string -> System.Reflection.Module member GetModules : unit -> System.Reflection.Module [] member GetModules : bool -> System.Reflection.Module [] member GetName : unit -> System.Reflection.AssemblyName member GetName : bool -> System.Reflection.AssemblyName member GetObjectData : System.Runtime.Serialization.SerializationInfo * System.Runtime.Serialization.StreamingContext -> unit member GetReferencedAssemblies : unit -> System.Reflection.AssemblyName [] member GetSatelliteAssembly : System.Globalization.CultureInfo -> System.Reflection.Assembly member GetSatelliteAssembly : System.Globalization.CultureInfo * System.Version -> System.Reflection.Assembly member GetType : string -> System.Type member GetType : string * bool -> System.Type member GetType : string * bool * bool -> System.Type member GetTypes : unit -> System.Type [] member GlobalAssemblyCache : bool member HostContext : int64 member ImageRuntimeVersion : string member IsDefined : System.Type * bool -> bool member IsDynamic : bool member IsFullyTrusted : bool member LoadModule : string * System.Byte [] -> System.Reflection.Module member LoadModule : string * System.Byte [] * System.Byte [] -> System.Reflection.Module member Location : string member ManifestModule : System.Reflection.Module member PermissionSet : System.Security.PermissionSet member ReflectionOnly : bool member SecurityRuleSet : System.Security.SecurityRuleSet member ToString : unit -> string static member CreateQualifiedName : string * string -> string static member GetAssembly : System.Type -> System.Reflection.Assembly static member GetCallingAssembly : unit -> System.Reflection.Assembly static member GetEntryAssembly : unit -> System.Reflection.Assembly static member GetExecutingAssembly : unit -> System.Reflection.Assembly static member Load : string -> System.Reflection.Assembly static member Load : System.Reflection.AssemblyName -> System.Reflection.Assembly static member Load : System.Byte [] -> System.Reflection.Assembly static member Load : string * System.Security.Policy.Evidence -> System.Reflection.Assembly static member Load : System.Reflection.AssemblyName * System.Security.Policy.Evidence -> System.Reflection.Assembly static member Load : System.Byte [] * System.Byte [] -> System.Reflection.Assembly static member Load : System.Byte [] * System.Byte [] * System.Security.SecurityContextSource -> System.Reflection.Assembly static member Load : System.Byte [] * System.Byte [] * System.Security.Policy.Evidence -> System.Reflection.Assembly static member LoadFile : string -> System.Reflection.Assembly static member LoadFile : string * System.Security.Policy.Evidence -> System.Reflection.Assembly static member LoadFrom : string -> System.Reflection.Assembly static member LoadFrom : string * System.Security.Policy.Evidence -> System.Reflection.Assembly static member LoadFrom : string * System.Byte [] * System.Configuration.Assemblies.AssemblyHashAlgorithm -> System.Reflection.Assembly static member LoadFrom : string * System.Security.Policy.Evidence * System.Byte [] * System.Configuration.Assemblies.AssemblyHashAlgorithm -> System.Reflection.Assembly static member LoadWithPartialName : string -> System.Reflection.Assembly static member LoadWithPartialName : string * System.Security.Policy.Evidence -> System.Reflection.Assembly static member ReflectionOnlyLoad : string -> System.Reflection.Assembly static member ReflectionOnlyLoad : System.Byte [] -> System.Reflection.Assembly static member ReflectionOnlyLoadFrom : string -> System.Reflection.Assembly static member UnsafeLoadFrom : string -> System.Reflection.Assembly end Full name: System.Reflection.Assembly type: Assembly implements: Runtime.InteropServices._Assembly implements: Security.IEvidenceFactory implements: ICustomAttributeProvider implements: Runtime.Serialization.ISerializable
Multiple overloads Assembly.LoadFrom(assemblyFile: string) : Assembly Assembly.LoadFrom(assemblyFile: string, hashValue: byte [], hashAlgorithm: Configuration.Assemblies.AssemblyHashAlgorithm) : Assembly
Assembly.GetTypes() : Type []
module Seq from Microsoft.FSharp.Collections
val map : ('T -> 'U) -> seq<'T> -> seq<'U> Full name: Microsoft.FSharp.Collections.Seq.map
val x : Type type: Type implements: ICustomAttributeProvider implements: Runtime.InteropServices._MemberInfo implements: Runtime.InteropServices._Type implements: IReflect inherits: MemberInfo
val getType : obj -> Type Full name: Arrow-Notation-via-FSharp.Reflect.getType
val x : obj
type obj = Object Full name: Microsoft.FSharp.Core.obj
val y : Type type: Type implements: ICustomAttributeProvider implements: Runtime.InteropServices._MemberInfo implements: Runtime.InteropServices._Type implements: IReflect inherits: MemberInfo
Object.GetType() : Type
val getFields : obj -> BindingFlags -> seq<Info> Full name: Arrow-Notation-via-FSharp.Reflect.getFields
val flags : BindingFlags type: BindingFlags inherits: Enum inherits: ValueType
type BindingFlags = | Default = 0 | IgnoreCase = 1 | DeclaredOnly = 2 | Instance = 4 | Static = 8 | Public = 16 | NonPublic = 32 | FlattenHierarchy = 64 | InvokeMethod = 256 | CreateInstance = 512 | GetField = 1024 | SetField = 2048 | GetProperty = 4096 | SetProperty = 8192 | PutDispProperty = 16384 | PutRefDispProperty = 32768 | ExactBinding = 65536 | SuppressChangeType = 131072 | OptionalParamBinding = 262144 | IgnoreReturn = 16777216 Full name: System.Reflection.BindingFlags type: BindingFlags inherits: Enum inherits: ValueType
val t : Type type: Type implements: ICustomAttributeProvider implements: Runtime.InteropServices._MemberInfo implements: Runtime.InteropServices._Type implements: IReflect inherits: MemberInfo
Multiple overloads Type.GetFields() : FieldInfo [] Type.GetFields(bindingAttr: BindingFlags) : FieldInfo []
val x : FieldInfo type: FieldInfo implements: ICustomAttributeProvider implements: Runtime.InteropServices._MemberInfo implements: Runtime.InteropServices._FieldInfo inherits: MemberInfo
val getProperties : obj -> BindingFlags -> seq<Info> Full name: Arrow-Notation-via-FSharp.Reflect.getProperties
Multiple overloads Type.GetProperties() : PropertyInfo [] Type.GetProperties(bindingAttr: BindingFlags) : PropertyInfo []
val x : PropertyInfo type: PropertyInfo implements: ICustomAttributeProvider implements: Runtime.InteropServices._MemberInfo implements: Runtime.InteropServices._PropertyInfo inherits: MemberInfo
val getEvents : obj -> BindingFlags -> seq<Info> Full name: Arrow-Notation-via-FSharp.Reflect.getEvents
Multiple overloads Type.GetEvents() : EventInfo [] Type.GetEvents(bindingAttr: BindingFlags) : EventInfo []
val x : EventInfo type: EventInfo implements: ICustomAttributeProvider implements: Runtime.InteropServices._MemberInfo implements: Runtime.InteropServices._EventInfo inherits: MemberInfo
val getMethods : obj -> BindingFlags -> seq<Info> Full name: Arrow-Notation-via-FSharp.Reflect.getMethods
Multiple overloads Type.GetMethods() : MethodInfo [] Type.GetMethods(bindingAttr: BindingFlags) : MethodInfo []
val x : MethodInfo type: MethodInfo implements: ICustomAttributeProvider implements: Runtime.InteropServices._MemberInfo implements: Runtime.InteropServices._MethodBase implements: Runtime.InteropServices._MethodInfo inherits: MethodBase inherits: MemberInfo
val getConstructors : obj -> BindingFlags -> seq<Info> Full name: Arrow-Notation-via-FSharp.Reflect.getConstructors
Multiple overloads Type.GetConstructors() : ConstructorInfo [] Type.GetConstructors(bindingAttr: BindingFlags) : ConstructorInfo []
val x : ConstructorInfo type: ConstructorInfo implements: ICustomAttributeProvider implements: Runtime.InteropServices._MemberInfo implements: Runtime.InteropServices._MethodBase implements: Runtime.InteropServices._ConstructorInfo inherits: MethodBase inherits: MemberInfo
val getMembers : BindingFlags -> BindingFlags -> BindingFlags -> BindingFlags -> BindingFlags -> obj -> seq<Info> Full name: Arrow-Notation-via-FSharp.Reflect.getMembers
val fflags : BindingFlags type: BindingFlags inherits: Enum inherits: ValueType
val pflags : BindingFlags type: BindingFlags inherits: Enum inherits: ValueType
val eflags : BindingFlags type: BindingFlags inherits: Enum inherits: ValueType
val mflags : BindingFlags type: BindingFlags inherits: Enum inherits: ValueType
val cflags : BindingFlags type: BindingFlags inherits: Enum inherits: ValueType
Multiple items val seq : seq<'T> -> seq<'T>  Full name: Microsoft.FSharp.Core.Operators.seq -------------------- type seq<'T> = Collections.Generic.IEnumerable<'T> Full name: Microsoft.FSharp.Collections.seq<_> type: seq<'T> inherits: Collections.IEnumerable
val Static : BindingFlags Full name: Arrow-Notation-via-FSharp.Static type: BindingFlags inherits: Enum inherits: ValueType
field BindingFlags.Static = 8
field BindingFlags.NonPublic = 32
field BindingFlags.Public = 16
val Instance : BindingFlags Full name: Arrow-Notation-via-FSharp.Instance type: BindingFlags inherits: Enum inherits: ValueType
field BindingFlags.Instance = 4
val All : BindingFlags Full name: Arrow-Notation-via-FSharp.All type: BindingFlags inherits: Enum inherits: ValueType
val fscore : seq<Reflect.Info> Full name: Arrow-Notation-via-FSharp.fscore type: seq<Reflect.Info> inherits: Collections.IEnumerable
module Reflect from Arrow-Notation-via-FSharp
val getTypes : string -> seq<Reflect.Info> Full name: Arrow-Notation-via-FSharp.Reflect.getTypes
val x : Reflect.Info type: Reflect.Info implements: IEquatable<Reflect.Info> implements: Collections.IStructuralEquatable
union case Reflect.Info.Types: Type -> Reflect.Info
val getMembers : BindingFlags -> BindingFlags -> BindingFlags -> BindingFlags -> BindingFlags -> obj -> seq<Reflect.Info> Full name: Arrow-Notation-via-FSharp.Reflect.getMembers
property MemberInfo.Name: string
val failwith : string -> 'T Full name: Microsoft.FSharp.Core.Operators.failwith
val iter : ('T -> unit) -> seq<'T> -> unit Full name: Microsoft.FSharp.Collections.Seq.iter
val x : seq<Reflect.Info> type: seq<Reflect.Info> inherits: Collections.IEnumerable
val y : string type: string implements: IComparable implements: ICloneable implements: IConvertible implements: IComparable<string> implements: seq<char> implements: Collections.IEnumerable implements: IEquatable<string>
val printfn : Printf.TextWriterFormat<'T> -> 'T Full name: Microsoft.FSharp.Core.ExtraTopLevelOperators.printfn
union case Reflect.Info.Fields: FieldInfo -> Reflect.Info
union case Reflect.Info.Properties: PropertyInfo -> Reflect.Info
union case Reflect.Info.Events: EventInfo -> Reflect.Info
union case Reflect.Info.Methods: MethodInfo -> Reflect.Info
union case Reflect.Info.Constructors: ConstructorInfo -> Reflect.Info
val sum : int -> int -> int Full name: Arrow-Notation-via-FSharp.sum
val a : int type: int implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<int> implements: IEquatable<int> inherits: ValueType
val b : int type: int implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<int> implements: IEquatable<int> inherits: ValueType
val mul : int -> int -> int Full name: Arrow-Notation-via-FSharp.mul
val sqr : int -> int Full name: Arrow-Notation-via-FSharp.sqr
val n : int type: int implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<int> implements: IEquatable<int> inherits: ValueType
val drakeEq : int -> float -> float -> float -> float -> float -> int -> float Full name: Arrow-Notation-via-FSharp.drakeEq
Multiple items val R : int  type: int implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<int> implements: IEquatable<int> inherits: ValueType -------------------- val R : int type: int implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<int> implements: IEquatable<int> inherits: ValueType
val fp : float type: float implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<float> implements: IEquatable<float> inherits: ValueType
val ne : float type: float implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<float> implements: IEquatable<float> inherits: ValueType
val fl : float type: float implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<float> implements: IEquatable<float> inherits: ValueType
val fi : float type: float implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<float> implements: IEquatable<float> inherits: ValueType
val fc : float type: float implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<float> implements: IEquatable<float> inherits: ValueType
Multiple items val L : int  type: int implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<int> implements: IEquatable<int> inherits: ValueType -------------------- val L : int type: int implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<int> implements: IEquatable<int> inherits: ValueType
Multiple items val float : 'T -> float (requires member op_Explicit)  Full name: Microsoft.FSharp.Core.Operators.float -------------------- type float<'Measure> = float Full name: Microsoft.FSharp.Core.float<_> type: float<'Measure> implements: IComparable implements: IConvertible implements: IFormattable implements: IComparable<float<'Measure>> implements: IEquatable<float<'Measure>> inherits: ValueType -------------------- type float = Double Full name: Microsoft.FSharp.Core.float type: float implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<float> implements: IEquatable<float> inherits: ValueType
val R : int type: int implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<int> implements: IEquatable<int> inherits: ValueType
val L : int type: int implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<int> implements: IEquatable<int> inherits: ValueType
Multiple items val int : 'T -> int (requires member op_Explicit)  Full name: Microsoft.FSharp.Core.Operators.int -------------------- type int<'Measure> = int Full name: Microsoft.FSharp.Core.int<_> type: int<'Measure> implements: IComparable implements: IConvertible implements: IFormattable implements: IComparable<int<'Measure>> implements: IEquatable<int<'Measure>> inherits: ValueType -------------------- type int = int32 Full name: Microsoft.FSharp.Core.int type: int implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<int> implements: IEquatable<int> inherits: ValueType
type 'a LinkedList = | Empty | Element of 'a * 'a LinkedList Full name: Arrow-Notation-via-FSharp.LinkedList<_> type: 'a LinkedList implements: IEquatable<'a LinkedList> implements: Collections.IStructuralEquatable implements: IComparable<'a LinkedList> implements: IComparable implements: Collections.IStructuralComparable
union case LinkedList.Empty: 'a LinkedList
union case LinkedList.Element: 'a * 'a LinkedList -> 'a LinkedList
val drakeEq' : int * float * float * float * float * float * int -> float Full name: Arrow-Notation-via-FSharp.drakeEq'
val xs : int LinkedList Full name: Arrow-Notation-via-FSharp.xs type: int LinkedList implements: IEquatable<int LinkedList> implements: Collections.IStructuralEquatable implements: IComparable<int LinkedList> implements: IComparable implements: Collections.IStructuralComparable
val filter : ('T -> bool) -> seq<'T> -> seq<'T> Full name: Microsoft.FSharp.Collections.Seq.filter
val x : int type: int implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<int> implements: IEquatable<int> inherits: ValueType
val next : (int -> int) Full name: Arrow-Notation-via-FSharp.next
val twice : (int -> int) Full name: Arrow-Notation-via-FSharp.twice
val x : int Full name: Arrow-Notation-via-FSharp.x type: int implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<int> implements: IEquatable<int> inherits: ValueType
val foldr : ('a -> 'b -> 'b) -> 'b -> 'a LinkedList -> 'b Full name: Arrow-Notation-via-FSharp.foldr
val f : ('a -> 'b -> 'b)
val acc : 'b
val xs : 'a LinkedList type: 'a LinkedList implements: IEquatable<'a LinkedList> implements: Collections.IStructuralEquatable implements: IComparable<'a LinkedList> implements: IComparable implements: Collections.IStructuralComparable
val foldr : ('a LinkedList -> ('b -> 'c) -> 'c)
val k : ('b -> 'c)
val x : 'a
val racc : 'b
val id : 'T -> 'T Full name: Microsoft.FSharp.Core.Operators.id
val foldl : ('a -> 'b -> 'a) -> 'a -> 'b LinkedList -> 'a Full name: Arrow-Notation-via-FSharp.foldl
val f : ('a -> 'b -> 'a)
val acc : 'a
val xs : 'b LinkedList type: 'b LinkedList implements: IEquatable<'b LinkedList> implements: Collections.IStructuralEquatable implements: IComparable<'b LinkedList> implements: IComparable implements: Collections.IStructuralComparable
val x : 'b
val identity : 'a LinkedList -> 'a LinkedList Full name: Arrow-Notation-via-FSharp.identity
val reverse : 'a LinkedList -> 'a LinkedList Full name: Arrow-Notation-via-FSharp.reverse
val length : 'a LinkedList -> int Full name: Arrow-Notation-via-FSharp.length
val xs : int type: int implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<int> implements: IEquatable<int> inherits: ValueType
val summation : int LinkedList -> int Full name: Arrow-Notation-via-FSharp.summation
val xs : int LinkedList type: int LinkedList implements: IEquatable<int LinkedList> implements: Collections.IStructuralEquatable implements: IComparable<int LinkedList> implements: IComparable implements: Collections.IStructuralComparable
val product : int LinkedList -> int Full name: Arrow-Notation-via-FSharp.product
val unfold : ('a -> 'b * 'a) -> ('a -> bool) -> 'a -> 'b LinkedList Full name: Arrow-Notation-via-FSharp.unfold
val unspool : ('a -> 'b * 'a)
val finished : ('a -> bool)
val a : 'b
val y : 'a
val fibUntil : int -> int LinkedList Full name: Arrow-Notation-via-FSharp.fibUntil
val until : int type: int implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<int> implements: IEquatable<int> inherits: ValueType
val x : int * int
val b' : int type: int implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<int> implements: IEquatable<int> inherits: ValueType
val fst : ('T1 * 'T2) -> 'T1 Full name: Microsoft.FSharp.Core.Operators.fst
val snd : ('T1 * 'T2) -> 'T2 Full name: Microsoft.FSharp.Core.Operators.snd
val fibs : int -> int LinkedList Full name: Arrow-Notation-via-FSharp.fibs
val x : int ref type: int ref implements: Collections.IStructuralEquatable implements: IComparable<Ref<int>> implements: IComparable implements: Collections.IStructuralComparable
Multiple items val ref : 'T -> 'T ref  Full name: Microsoft.FSharp.Core.Operators.ref -------------------- type 'T ref = Ref<'T> Full name: Microsoft.FSharp.Core.ref<_> type: 'T ref implements: Collections.IStructuralEquatable implements: IComparable<Ref<'T>> implements: IComparable implements: Collections.IStructuralComparable
val fibonacci : seq<Numerics.BigInteger> Full name: Arrow-Notation-via-FSharp.fibonacci type: seq<Numerics.BigInteger> inherits: Collections.IEnumerable
val unfold : ('State -> ('T * 'State) option) -> 'State -> seq<'T> Full name: Microsoft.FSharp.Collections.Seq.unfold
val x : Numerics.BigInteger type: Numerics.BigInteger implements: IFormattable implements: IComparable implements: IComparable<Numerics.BigInteger> implements: IEquatable<Numerics.BigInteger> inherits: ValueType
val y : Numerics.BigInteger type: Numerics.BigInteger implements: IFormattable implements: IComparable implements: IComparable<Numerics.BigInteger> implements: IEquatable<Numerics.BigInteger> inherits: ValueType
union case Option.Some: 'T -> Option<'T>
val nth : int -> seq<'T> -> 'T Full name: Microsoft.FSharp.Collections.Seq.nth
namespace Microsoft
module SfsWrapper
type MeasureAttribute = class inherit Attribute new : unit -> MeasureAttribute end Full name: Microsoft.FSharp.Core.MeasureAttribute type: MeasureAttribute implements: Runtime.InteropServices._Attribute inherits: Attribute
[<Measure>] type Year Full name: Arrow-Notation-via-FSharp.Year
[<Measure>] type Star Full name: Arrow-Notation-via-FSharp.Star
[<Measure>] type Planet Full name: Arrow-Notation-via-FSharp.Planet
[<Measure>] type LifeCapible =/Star Full name: Arrow-Notation-via-FSharp.LifeCapible
[<Measure>] type Life = Planet/LifeCapible Full name: Arrow-Notation-via-FSharp.Life
[<Measure>] type IntelligentLife = Planet/Life Full name: Arrow-Notation-via-FSharp.IntelligentLife
[<Measure>] type CommunicatingIntelligentLife = Planet/IntelligentLife Full name: Arrow-Notation-via-FSharp.CommunicatingIntelligentLife
[<Measure>] type Civilization Full name: Arrow-Notation-via-FSharp.Civilization
val context : 'a Full name: Arrow-Notation-via-FSharp.context
val drake : SfsModel Full name: Arrow-Notation-via-FSharp.drake
type SfsModel = class new : context:'a -> SfsModel member Abs : x:SfsRealTerm<'u> -> 'a member Abs : x:SfsIntTerm<'u> -> 'a member AddConstraint : term:'_arg96 -> 'a member AddConstraint : name:'a * term:'b -> 'c member AddConstraints : terms:'_arg72 [] -> 'a member AddConstraints : name:'a * terms:'b -> 'c member AddGoal : goalKind:'a * objective:SfsIntTerm<'u> -> 'b member AddGoal : goalKind:'a * objective:SfsRealTerm<'u> -> 'b member AddGoal : name:'a * goalKind:'b * objective:SfsIntTerm<'u> -> 'c member AddGoal : name:'a * goalKind:'b * objective:SfsRealTerm<'u> -> 'c member AllDifferent : args:SfsRealTerm<'u> [] -> 'a member AllDifferent : args:SfsIntTerm<'u> [] -> 'a member AllDifferent : args:SfsSymbolicVariable<'b> [] -> 'a member And : args:SfsBooleanTerm [] -> 'a member AtMostMofN : m:'a * args:SfsBooleanTerm array -> 'b member CreateBooleanVariable : unit -> 'a member CreateBooleanVariable : name:'a -> 'b member CreateIntConstant : x:int<'u> -> SfsIntTerm<'u> member CreateIntNonnegativeVariable : unit -> 'a member CreateIntNonnegativeVariable : name:'a -> 'b member CreateIntRangeVariable : min:'a * max:'b -> 'c member CreateIntRangeVariable : min:int<'u> * max:int<'u> * name:'a -> 'b member CreateIntSetVariable : allowedValues:'a -> 'b member CreateIntSetVariable : allowedValues:Set<int<'u>> * name:'a -> 'b member CreateIntVariable : unit -> 'a member CreateIntVariable : name:'a -> 'b member CreateRealConstant : x:float<'u> -> SfsRealTerm<'u> member CreateRealNonnegativeVariable : unit -> 'a member CreateRealNonnegativeVariable : name:'a -> 'b member CreateRealRangeVariable : min:'a * max:'b -> 'c member CreateRealRangeVariable : min:float<'u> * max:float<'u> * name:'a -> 'b member CreateRealSetVariable : allowedValues:'a -> 'b member CreateRealSetVariable : allowedValues:Set<float<'u>> -> 'a member CreateRealSetVariable : allowedValues:'a * name:'b -> 'c member CreateRealSetVariable : allowedValues:Set<float<'u>> * name:'a -> 'b member CreateRealVariable : unit -> int member CreateRealVariable : name:'a -> 'b member CreateSymbolicVariable : unit -> 'a member CreateSymbolicVariable : name:'a -> 'b member Difference : l:SfsRealTerm<'u> * r:SfsRealTerm<'u> -> 'a member Difference : l:SfsIntTerm<'u 'w> * r:SfsIntTerm<'u 'w> -> 'a member Equal : args:SfsRealTerm<'u> [] -> 'a member Equal : args:SfsIntTerm<'u> [] -> 'a member Equal : args:SfsSymbolicVariable<'a> [] -> 'b member ExactlyMofN : m:'a * args:SfsBooleanTerm array -> 'b member ForEach : args:'a array * f:('a -> SfsBooleanTerm) -> 'b member ForEachWhere : args:'a array * predicate:('a -> SfsBooleanTerm) * f:('a -> SfsBooleanTerm) -> 'b member Greater : args:SfsRealTerm<'u> [] -> 'a member Greater : args:SfsIntTerm<'u> [] -> 'a member GreaterEqual : args:SfsRealTerm<'u> [] -> 'a member GreaterEqual : args:SfsIntTerm<'u> [] -> 'a member Less : args:SfsRealTerm<'u> [] -> 'a member Less : args:SfsIntTerm<'u> [] -> 'a member LessEqual : args:SfsRealTerm<'u> [] -> 'a member LessEqual : args:SfsIntTerm<'u> [] -> 'a member Negate : x:SfsRealTerm<'u> -> 'a member Negate : x:SfsIntTerm<'u> -> 'a member Not : arg:SfsBooleanTerm -> 'a (requires 'a :> SfsBooleanTerm) member Or : args:SfsBooleanTerm [] -> 'a member internal Product : l:'a * r:'a -> 'a member RemoveConstraint : c:SfsConstraint -> 'a member RemoveGoal : g:'a -> 'b (requires 'a :> SfsGoal) member SaveModel : format:'a * writer:'b -> 'c member Solve : directives:'a -> 'b member Solve : directive:'a -> 'b member Solve : x:'a -> 'b member Square : x:SfsRealTerm<'u> -> 'a member Square : x:SfsIntTerm<'u> -> 'a member Sum : args:SfsRealTerm<'u> array -> 'a member Sum : args:SfsIntTerm<'u 'w> array -> 'a member Sum : args:SfsRealVariable<'u> array -> 'a member Sum : args:SfsIntVariable<'u> array -> 'a member False : 'a member Model : 'a member True : 'a end Full name: SfsWrapper.SfsWrapper.SfsModel Describes a Solver Foundation model, i.e., a problem description with variables, constraints, objectives, etc.
val R : int Full name: Arrow-Notation-via-FSharp.R type: int implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<int> implements: IEquatable<int> inherits: ValueType
Multiple overloads member SfsModel.CreateRealVariable : unit -> int  Creates a real valued (float) decision variable with unit-of-measure, and adds it to the model member SfsModel.CreateRealVariable : name:'a -> 'b Creates a real valued (float) decision variable with unit-of-measure, and adds it to the model
val fp : int Full name: Arrow-Notation-via-FSharp.fp type: int implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<int> implements: IEquatable<int> inherits: ValueType
val ne : int Full name: Arrow-Notation-via-FSharp.ne type: int implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<int> implements: IEquatable<int> inherits: ValueType
val fl : int Full name: Arrow-Notation-via-FSharp.fl type: int implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<int> implements: IEquatable<int> inherits: ValueType
val fi : int Full name: Arrow-Notation-via-FSharp.fi type: int implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<int> implements: IEquatable<int> inherits: ValueType
val fc : int Full name: Arrow-Notation-via-FSharp.fc type: int implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<int> implements: IEquatable<int> inherits: ValueType
val L : int Full name: Arrow-Notation-via-FSharp.L type: int implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<int> implements: IEquatable<int> inherits: ValueType
val N : int Full name: Arrow-Notation-via-FSharp.N type: int implements: IComparable implements: IFormattable implements: IConvertible implements: IComparable<int> implements: IEquatable<int> inherits: ValueType
Multiple overloads member SfsModel.AddConstraints : terms:'_arg72 [] -> 'a  Adds a list of boolean terms as constraints member SfsModel.AddConstraints : name:'a * terms:'b -> 'c Adds a list of boolean terms as constraints
val cR : 'a Full name: Arrow-Notation-via-FSharp.cR
Multiple overloads member SfsModel.AddConstraint : term:'_arg96 -> 'a  Adds a single boolean term as a constraint member SfsModel.AddConstraint : name:'a * term:'b -> 'c Adds a single boolean term as a constraint
val cfp : 'a Full name: Arrow-Notation-via-FSharp.cfp
val cne : 'a Full name: Arrow-Notation-via-FSharp.cne
val cfl : 'a Full name: Arrow-Notation-via-FSharp.cfl
val cfi : 'a Full name: Arrow-Notation-via-FSharp.cfi
val cfc : 'a Full name: Arrow-Notation-via-FSharp.cfc
val cL : 'a Full name: Arrow-Notation-via-FSharp.cL
val cN : 'a Full name: Arrow-Notation-via-FSharp.cN
val minimumLifeCapible : 'a Full name: Arrow-Notation-via-FSharp.minimumLifeCapible
Multiple overloads member SfsModel.AddGoal : goalKind:'a * objective:SfsIntTerm<'u> -> 'b  Adds a numerical term as an objective function (goal) member SfsModel.AddGoal : goalKind:'a * objective:SfsRealTerm<'u> -> 'b Adds a numerical term as an objective function (goal) member SfsModel.AddGoal : name:'a * goalKind:'b * objective:SfsIntTerm<'u> -> 'c Adds a numerical term as an objective function (goal) member SfsModel.AddGoal : name:'a * goalKind:'b * objective:SfsRealTerm<'u> -> 'c Adds a numerical term as an objective function (goal)
val solution : 'a Full name: Arrow-Notation-via-FSharp.solution
Multiple overloads member SfsModel.Solve : directives:'a -> 'b  Solves the program, with a given solver or a set of solvers in parallel. Use this when solvers need to be parameterized member SfsModel.Solve : directive:'a -> 'b Solves the program, with a given solver in its default configuration member SfsModel.Solve : x:'a -> 'b Solves the program using a simplex solver
union case SolverDirectives.LocalSearch: SolverDirectives

Solver Foundation is really fun to play with and the samples that come with it are great! But I’ll save a post on it for later. F# 3.0 will ship with a feature called “Type Providers” which will make it trivial to retrieve values for these variables from existing data sources in the cloud.