open FSharp.Data.UnitSystems.SI.UnitSymbols type float<[] 'm> with member a.Bind(f,x) = f x * a member a.Return(x) = a * sqrt x member a.Yield(x) = a / x member a.Combine(b:float<'m1>, c:float<'m2>) = a * b * c member a.Quote(x) = System.Runtime.Hosting.ApplicationActivator() member a.Delay(f) = f() * a member a.Run(f) = Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.EvaluateQuotation f [] type A = [] static member Yield(_:float, b:float) = b * 1.0 // Mystery question: Where does the Celsius come from? let x = 3.14 { yield 2.71 yield 2.71 }