Tetris

Playable Tetris mini-game. Use arrow keys to move left and right and up to rotate, down to drop. Try it out in the browser on TryFSharp.org

Copy Source
Copy Link
Tools:
  1: Skip module definition on TryFSharp.org
  2: 
  3: open System
  4: open System.Windows
  5: open System.Windows.Controls
  6: open System.Windows.Input
  7: open System.Windows.Media
  8: open System.Windows.Shapes
  9: 
 10: Keyboard input
 11: 
 12: let tetrads =
 13:     [
 14:         [0,0;0,1;0,2;0,3],Colors.Red, Colors.Yellow
 15:         [0,0;1,0;0,1;1,1],Colors.Blue, Colors.Cyan
 16:         [0,0;1,0;2,0;1,1],Colors.Purple, Colors.Magenta
 17:         [0,0;1,0;2,0;0,1],Colors.Yellow, Colors.Orange
 18:         [0,0;1,0;2,0;2,1],Colors.White, Colors.LightGray
 19:         [0,0;1,0;1,1;2,1],Colors.Green, Colors.Gray
 20:         [0,1;1,1;1,0;2,0],Colors.Brown, Colors.DarkGray
 21:     ]
 22: 
 23: type Block = { X:int; Y:int; Rectangle:Rectangle }
 24: type Tetrad = { Blocks:Block list; Canvas:Canvas }
 25: 
 26: let setPosition (block:#UIElement) (x,y) =    
 27:     block.SetValue(Canvas.LeftProperty, x)
 28:     block.SetValue(Canvas.TopProperty, y)
 29: 
 30: let blockSize = 16.0
 31: let toPosition (x,y) = float x * blockSize, float y * blockSize
 32: 
 33: let positionBlock block =
 34:     (block.X, block.Y) |> toPosition |> setPosition block.Rectangle
 35: 
 36: let positionBlocks blocks = 
 37:     blocks |> List.iter positionBlock
 38: 
 39: let positionTetrad tetrad (x,y) =
 40:     (x,y) |> toPosition |> setPosition tetrad.Canvas
 41:     
 42: let createTetrad (coordinates,stroke,fill) =    
 43:     let createRectangle () =
 44:         Rectangle(
 45:             Width=blockSize,Height=blockSize,
 46:             Fill=SolidColorBrush fill,
 47:             Stroke=SolidColorBrush stroke,
 48:             StrokeThickness=2.0)    
 49:     let createBlocks coordinates =
 50:         coordinates |> List.map (fun (x,y) ->
 51:             let rectangle = createRectangle ()        
 52:             { X=x; Y=y; Rectangle=rectangle }
 53:         )
 54:     let composeBlocks blocks =
 55:         let canvas = new Canvas()
 56:         blocks |> List.iter (fun block ->            
 57:             canvas.Children.Add block.Rectangle
 58:         )
 59:         canvas
 60:     let blocks = createBlocks coordinates
 61:     positionBlocks blocks
 62:     let canvas = composeBlocks blocks
 63:     { Blocks=blocks; Canvas=canvas }
 64: 
 65: let wellWidth, wellHeight = 10, 20
 66: 
 67: type Well() =
 68:     let canvas = Canvas() 
 69:     let matrix = Array2D.create wellWidth wellHeight None
 70:     let addBlock (x,y) block =
 71:         matrix.[x,y] <- Some block
 72:         canvas.Children.Add block
 73:     let clear () =
 74:         matrix |> Array2D.iteri (fun x y block ->
 75:             block |> Option.iter (fun block ->
 76:                 canvas.Children.Remove block |> ignore
 77:                 matrix.[x,y] <- None
 78:             )
 79:         )        
 80:     let isBlocked (x,y) =
 81:         if x < 0 || x >= wellWidth then true
 82:         elif y < 0 || y >= wellHeight then true
 83:         else
 84:             matrix.[x,y] |> Option.exists (fun x -> true)
 85:     let checkLines () =
 86:         let lineBlockCounts =
 87:             [0..wellHeight-1] |> List.map (fun y ->
 88:                 [0..wellWidth-1] 
 89:                 |> List.map (fun x -> matrix.[x,y])
 90:                 |> List.map Option.count 
 91:                 |> List.reduce (+), y
 92:             )
 93:         let clearLine y =
 94:             for x = 0 to wellWidth-1 do
 95:                 matrix.[x,y] |> Option.iter (fun block -> 
 96:                     canvas.Children.Remove block |> ignore)
 97:                 matrix.[x,y] <- None
 98:         let fallDownTo y =
 99:             for i = y-1 downto 1 do
100:                 for x = 0 to wellWidth-1 do
101:                     let block = matrix.[x,i]                        
102:                     block |> Option.iter (fun block ->                         
103:                         setPosition block (toPosition (x,i+1))
104:                         matrix.[x,i+1] <- Some block
105:                         matrix.[x,i] <- None
106:                     )
107:         lineBlockCounts |> List.iter (fun (count,y) -> 
108:             if count = wellWidth then
109:                 clearLine y
110:                 fallDownTo y             
111:         )
112:     member well.IsBlocked = isBlocked
113:     member well.AddBlock (x,y) (block:UIElement) = addBlock (x,y) block         
114:     member well.CheckLines () = checkLines ()
115:     member well.Clear () = clear ()
116:     member well.Control = canvas
117: 
118: type GameControl() as this =
119:     inherit UserControl(
120:             Width = float wellWidth*blockSize, 
121:             Height = float wellHeight*blockSize,
122:             IsTabStop = true)
123: 
124:     let keys = KeyState(this)    
125:     let well = Well()           
126:     let canvas = Canvas(Background=SolidColorBrush Colors.Black)
127:     do  canvas.Children.Add(well.Control)
128:     let layout = Grid()
129:     do  layout.Children.Add canvas
130:     do  this.Content <- layout
131: 
132:     let isTetradBlocked (tetrad) (x,y) =
133:         tetrad.Blocks |> List.exists (fun block ->            
134:             (block.X + x, block.Y + y) |> well.IsBlocked
135:         )
136: 
137:     let rotateTetrad tetrad =
138:         let blocks = 
139:             tetrad.Blocks |> List.map (fun block ->
140:                 {block with X = block.Y; Y = -block.X}
141:             )                        
142:         { tetrad with Blocks=blocks }
143: 
144:     let controlTetrad tetrad (x,y) =
145:         let dx = 
146:             keys.ReadKeyPresses Key.Right - keys.ReadKeyPresses Key.Left
147:             |> sign                                              
148:         let rotate = keys.ReadKeyPressed Key.Up                              
149:         let newTetrad = if rotate then rotateTetrad(!tetrad) else !tetrad            
150:         if not (isTetradBlocked newTetrad (!x+dx,!y+1)) then
151:             positionBlocks newTetrad.Blocks
152:             tetrad := newTetrad
153:             x := !x + dx
154: 
155:     let dockTetrad (tetrad) (x,y) =
156:         tetrad.Blocks |> List.iter (fun block ->
157:             tetrad.Canvas.Children.Remove block.Rectangle |> ignore
158:             let x',y' = block.X + x, block.Y + y
159:             setPosition block.Rectangle (toPosition (x', y'))                                    
160:             block.Rectangle |> well.AddBlock (x',y') 
161:         )
162: 
163:     let playTetrad tetrad (x,y) = async {
164:         positionTetrad !tetrad (!x,!y)                                                 
165:         canvas.Children.Add (!tetrad).Canvas
166:         let speed = ref 300       
167:         while not (isTetradBlocked !tetrad (!x,!y)) do            
168:             do! Async.Sleep !speed
169:             if keys.ReadKeyPressed Key.Down then speed := 30                
170:             controlTetrad tetrad (x,y)
171:             incr y
172:             if isTetradBlocked !tetrad (!x,!y+1) then
173:                 dockTetrad (!tetrad) (!x,!y)
174:                 canvas.Children.Remove (!tetrad).Canvas |> ignore
175:             positionTetrad !tetrad (!x,!y)                   
176:         }
177: 
178:     let rand = Random()  
179:     let rec inGameLoop () = async {  
180:         let index = rand.Next tetrads.Length 
181:         let tetrad = ref (createTetrad tetrads.[index])
182:         let x, y = ref (wellWidth/2 - 2), ref 0      
183:         if not (isTetradBlocked !tetrad (!x,!y+1)) then
184:             do! playTetrad tetrad (x,y) 
185:             well.CheckLines()
186:             return! inGameLoop ()   
187:         }
188: 
189:     let message s =
190:         TextBlock(
191:             Text=s,
192:             HorizontalAlignment = HorizontalAlignment.Center,
193:             VerticalAlignment = VerticalAlignment.Center,
194:             Foreground = SolidColorBrush Colors.White)        
195: 
196:     let prompt text action = async {
197:         let start = message text
198:         layout.Children.Add start
199:         do! action()
200:         layout.Children.Remove start |> ignore
201:         }
202:         
203:     let awaitClick () = this.MouseLeftButtonDown |> Async.AwaitEvent |> Async.Ignore
204:     let pause () =  Async.Sleep 5000
205: 
206:     let rec gameLoop () =  async {
207:         do! prompt "Click To Start" awaitClick                                    
208:         do! inGameLoop ()         
209:         do! prompt "Game Over" pause        
210:         well.Clear()
211:         return! gameLoop ()
212:         } 
213:     
214:     do  gameLoop() |> Async.StartImmediate
215: 
216: Run script on TryFSharp.org
#if INTERACTIVE
#else
module Game
#endif
namespace System
namespace System.Windows
namespace System.Windows.Controls
namespace System.Windows.Input
namespace System.Windows.Media
namespace System.Windows.Shapes
type KeyState (control:Control) =
    let mutable keysDown = Set.empty
    let mutable keyUps = List.empty
    let addKey key () = keyUps <- key :: keyUps
    let readKeyUps key () =
        let ofKey, otherKeys =
            keyUps |> List.partition ((=) key)
        keyUps <- otherKeys
        List.length ofKey
    let sync = obj()
    do control.KeyDown.Add (fun e ->
            keysDown <- keysDown.Add e.Key
        )
    do control.KeyUp.Add (fun e ->
            keysDown <- keysDown.Remove e.Key
            lock sync (e.Key |> addKey)
        )
    member this.IsKeyDown key = keysDown.Contains key
    member this.IsAnyKeyDwn () = keysDown.Count > 0
    member this.ReadKeyPressed key =
        let keyUps = lock sync (key |> readKeyUps)
        keyUps > 0
    member this.ReadKeyPresses key =
        let keyUps = lock sync (key |> readKeyUps)
        keyUps + (if keysDown.Contains key then 1 else 0)
val tetrads : ((int * int) list * Color * Color) list

Full name: Snippet.tetrads

  type: ((int * int) list * Color * Color) list
  implements: Collections.IStructuralEquatable
  implements: IComparable<List<(int * int) list * Color * Color>>
  implements: IComparable
  implements: Collections.IStructuralComparable
  implements: Collections.Generic.IEnumerable<(int * int) list * Color * Color>
  implements: Collections.IEnumerable
type Colors =
  class
    static member AliceBlue : System.Windows.Media.Color
    static member AntiqueWhite : System.Windows.Media.Color
    static member Aqua : System.Windows.Media.Color
    static member Aquamarine : System.Windows.Media.Color
    static member Azure : System.Windows.Media.Color
    static member Beige : System.Windows.Media.Color
    static member Bisque : System.Windows.Media.Color
    static member Black : System.Windows.Media.Color
    static member BlanchedAlmond : System.Windows.Media.Color
    static member Blue : System.Windows.Media.Color
    static member BlueViolet : System.Windows.Media.Color
    static member Brown : System.Windows.Media.Color
    static member BurlyWood : System.Windows.Media.Color
    static member CadetBlue : System.Windows.Media.Color
    static member Chartreuse : System.Windows.Media.Color
    static member Chocolate : System.Windows.Media.Color
    static member Coral : System.Windows.Media.Color
    static member CornflowerBlue : System.Windows.Media.Color
    static member Cornsilk : System.Windows.Media.Color
    static member Crimson : System.Windows.Media.Color
    static member Cyan : System.Windows.Media.Color
    static member DarkBlue : System.Windows.Media.Color
    static member DarkCyan : System.Windows.Media.Color
    static member DarkGoldenrod : System.Windows.Media.Color
    static member DarkGray : System.Windows.Media.Color
    static member DarkGreen : System.Windows.Media.Color
    static member DarkKhaki : System.Windows.Media.Color
    static member DarkMagenta : System.Windows.Media.Color
    static member DarkOliveGreen : System.Windows.Media.Color
    static member DarkOrange : System.Windows.Media.Color
    static member DarkOrchid : System.Windows.Media.Color
    static member DarkRed : System.Windows.Media.Color
    static member DarkSalmon : System.Windows.Media.Color
    static member DarkSeaGreen : System.Windows.Media.Color
    static member DarkSlateBlue : System.Windows.Media.Color
    static member DarkSlateGray : System.Windows.Media.Color
    static member DarkTurquoise : System.Windows.Media.Color
    static member DarkViolet : System.Windows.Media.Color
    static member DeepPink : System.Windows.Media.Color
    static member DeepSkyBlue : System.Windows.Media.Color
    static member DimGray : System.Windows.Media.Color
    static member DodgerBlue : System.Windows.Media.Color
    static member Firebrick : System.Windows.Media.Color
    static member FloralWhite : System.Windows.Media.Color
    static member ForestGreen : System.Windows.Media.Color
    static member Fuchsia : System.Windows.Media.Color
    static member Gainsboro : System.Windows.Media.Color
    static member GhostWhite : System.Windows.Media.Color
    static member Gold : System.Windows.Media.Color
    static member Goldenrod : System.Windows.Media.Color
    static member Gray : System.Windows.Media.Color
    static member Green : System.Windows.Media.Color
    static member GreenYellow : System.Windows.Media.Color
    static member Honeydew : System.Windows.Media.Color
    static member HotPink : System.Windows.Media.Color
    static member IndianRed : System.Windows.Media.Color
    static member Indigo : System.Windows.Media.Color
    static member Ivory : System.Windows.Media.Color
    static member Khaki : System.Windows.Media.Color
    static member Lavender : System.Windows.Media.Color
    static member LavenderBlush : System.Windows.Media.Color
    static member LawnGreen : System.Windows.Media.Color
    static member LemonChiffon : System.Windows.Media.Color
    static member LightBlue : System.Windows.Media.Color
    static member LightCoral : System.Windows.Media.Color
    static member LightCyan : System.Windows.Media.Color
    static member LightGoldenrodYellow : System.Windows.Media.Color
    static member LightGray : System.Windows.Media.Color
    static member LightGreen : System.Windows.Media.Color
    static member LightPink : System.Windows.Media.Color
    static member LightSalmon : System.Windows.Media.Color
    static member LightSeaGreen : System.Windows.Media.Color
    static member LightSkyBlue : System.Windows.Media.Color
    static member LightSlateGray : System.Windows.Media.Color
    static member LightSteelBlue : System.Windows.Media.Color
    static member LightYellow : System.Windows.Media.Color
    static member Lime : System.Windows.Media.Color
    static member LimeGreen : System.Windows.Media.Color
    static member Linen : System.Windows.Media.Color
    static member Magenta : System.Windows.Media.Color
    static member Maroon : System.Windows.Media.Color
    static member MediumAquamarine : System.Windows.Media.Color
    static member MediumBlue : System.Windows.Media.Color
    static member MediumOrchid : System.Windows.Media.Color
    static member MediumPurple : System.Windows.Media.Color
    static member MediumSeaGreen : System.Windows.Media.Color
    static member MediumSlateBlue : System.Windows.Media.Color
    static member MediumSpringGreen : System.Windows.Media.Color
    static member MediumTurquoise : System.Windows.Media.Color
    static member MediumVioletRed : System.Windows.Media.Color
    static member MidnightBlue : System.Windows.Media.Color
    static member MintCream : System.Windows.Media.Color
    static member MistyRose : System.Windows.Media.Color
    static member Moccasin : System.Windows.Media.Color
    static member NavajoWhite : System.Windows.Media.Color
    static member Navy : System.Windows.Media.Color
    static member OldLace : System.Windows.Media.Color
    static member Olive : System.Windows.Media.Color
    static member OliveDrab : System.Windows.Media.Color
    static member Orange : System.Windows.Media.Color
    static member OrangeRed : System.Windows.Media.Color
    static member Orchid : System.Windows.Media.Color
    static member PaleGoldenrod : System.Windows.Media.Color
    static member PaleGreen : System.Windows.Media.Color
    static member PaleTurquoise : System.Windows.Media.Color
    static member PaleVioletRed : System.Windows.Media.Color
    static member PapayaWhip : System.Windows.Media.Color
    static member PeachPuff : System.Windows.Media.Color
    static member Peru : System.Windows.Media.Color
    static member Pink : System.Windows.Media.Color
    static member Plum : System.Windows.Media.Color
    static member PowderBlue : System.Windows.Media.Color
    static member Purple : System.Windows.Media.Color
    static member Red : System.Windows.Media.Color
    static member RosyBrown : System.Windows.Media.Color
    static member RoyalBlue : System.Windows.Media.Color
    static member SaddleBrown : System.Windows.Media.Color
    static member Salmon : System.Windows.Media.Color
    static member SandyBrown : System.Windows.Media.Color
    static member SeaGreen : System.Windows.Media.Color
    static member SeaShell : System.Windows.Media.Color
    static member Sienna : System.Windows.Media.Color
    static member Silver : System.Windows.Media.Color
    static member SkyBlue : System.Windows.Media.Color
    static member SlateBlue : System.Windows.Media.Color
    static member SlateGray : System.Windows.Media.Color
    static member Snow : System.Windows.Media.Color
    static member SpringGreen : System.Windows.Media.Color
    static member SteelBlue : System.Windows.Media.Color
    static member Tan : System.Windows.Media.Color
    static member Teal : System.Windows.Media.Color
    static member Thistle : System.Windows.Media.Color
    static member Tomato : System.Windows.Media.Color
    static member Transparent : System.Windows.Media.Color
    static member Turquoise : System.Windows.Media.Color
    static member Violet : System.Windows.Media.Color
    static member Wheat : System.Windows.Media.Color
    static member White : System.Windows.Media.Color
    static member WhiteSmoke : System.Windows.Media.Color
    static member Yellow : System.Windows.Media.Color
    static member YellowGreen : System.Windows.Media.Color
  end

Full name: System.Windows.Media.Colors
property Colors.Red: Color
property Colors.Yellow: Color
property Colors.Blue: Color
property Colors.Cyan: Color
property Colors.Purple: Color
property Colors.Magenta: Color
property Colors.Orange: Color
property Colors.White: Color
property Colors.LightGray: Color
property Colors.Green: Color
property Colors.Gray: Color
property Colors.Brown: Color
property Colors.DarkGray: Color
type Block =
  {X: int;
   Y: int;
   Rectangle: Rectangle;}

Full name: Snippet.Block

  type: Block
  implements: IEquatable<Block>
  implements: Collections.IStructuralEquatable
Block.X: int
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
Block.Y: int
Multiple items
Block.Rectangle: Rectangle

--------------------

type Rectangle =
  class
    inherit System.Windows.Shapes.Shape
    new : unit -> System.Windows.Shapes.Rectangle
    member GeometryTransform : System.Windows.Media.Transform
    member RadiusX : float with get, set
    member RadiusY : float with get, set
    member RenderedGeometry : System.Windows.Media.Geometry
    static val RadiusXProperty : System.Windows.DependencyProperty
    static val RadiusYProperty : System.Windows.DependencyProperty
  end

Full name: System.Windows.Shapes.Rectangle

  type: Rectangle
  implements: Composition.DUCE.IResource
  implements: Animation.IAnimatable
  implements: IFrameworkInputElement
  implements: IInputElement
  implements: ComponentModel.ISupportInitialize
  implements: Markup.IHaveResources
  implements: Markup.IQueryAmbient
  inherits: Shape
  inherits: FrameworkElement
  inherits: UIElement
  inherits: Visual
  inherits: DependencyObject
  inherits: Threading.DispatcherObject
type Tetrad =
  {Blocks: Block list;
   Canvas: Canvas;}

Full name: Snippet.Tetrad

  type: Tetrad
  implements: IEquatable<Tetrad>
  implements: Collections.IStructuralEquatable
Tetrad.Blocks: Block list
type 'T list = List<'T>

Full name: Microsoft.FSharp.Collections.list<_>

  type: 'T list
  implements: Collections.IStructuralEquatable
  implements: IComparable<List<'T>>
  implements: IComparable
  implements: Collections.IStructuralComparable
  implements: Collections.Generic.IEnumerable<'T>
  implements: Collections.IEnumerable
Multiple items
Tetrad.Canvas: Canvas

--------------------

type Canvas =
  class
    inherit System.Windows.Controls.Panel
    new : unit -> System.Windows.Controls.Canvas
    static val LeftProperty : System.Windows.DependencyProperty
    static val TopProperty : System.Windows.DependencyProperty
    static val RightProperty : System.Windows.DependencyProperty
    static val BottomProperty : System.Windows.DependencyProperty
    static member GetBottom : System.Windows.UIElement -> float
    static member GetLeft : System.Windows.UIElement -> float
    static member GetRight : System.Windows.UIElement -> float
    static member GetTop : System.Windows.UIElement -> float
    static member SetBottom : System.Windows.UIElement * float -> unit
    static member SetLeft : System.Windows.UIElement * float -> unit
    static member SetRight : System.Windows.UIElement * float -> unit
    static member SetTop : System.Windows.UIElement * float -> unit
  end

Full name: System.Windows.Controls.Canvas

  type: Canvas
  implements: Composition.DUCE.IResource
  implements: Animation.IAnimatable
  implements: IFrameworkInputElement
  implements: IInputElement
  implements: ComponentModel.ISupportInitialize
  implements: Markup.IHaveResources
  implements: Markup.IQueryAmbient
  implements: Markup.IAddChild
  inherits: Panel
  inherits: FrameworkElement
  inherits: UIElement
  inherits: Visual
  inherits: DependencyObject
  inherits: Threading.DispatcherObject
val setPosition : #UIElement -> 'b * 'c -> unit

Full name: Snippet.setPosition
val block : #UIElement

  type: #UIElement
  implements: Composition.DUCE.IResource
  implements: Animation.IAnimatable
  implements: IInputElement
  inherits: UIElement
  inherits: Visual
  inherits: DependencyObject
  inherits: Threading.DispatcherObject
type UIElement =
  class
    inherit System.Windows.Media.Visual
    new : unit -> System.Windows.UIElement
    member AddHandler : System.Windows.RoutedEvent * System.Delegate -> unit
    member AddHandler : System.Windows.RoutedEvent * System.Delegate * bool -> unit
    member AddToEventRoute : System.Windows.EventRoute * System.Windows.RoutedEventArgs -> unit
    member AllowDrop : bool with get, set
    member ApplyAnimationClock : System.Windows.DependencyProperty * System.Windows.Media.Animation.AnimationClock -> unit
    member ApplyAnimationClock : System.Windows.DependencyProperty * System.Windows.Media.Animation.AnimationClock * System.Windows.Media.Animation.HandoffBehavior -> unit
    member AreAnyTouchesCaptured : bool
    member AreAnyTouchesCapturedWithin : bool
    member AreAnyTouchesDirectlyOver : bool
    member AreAnyTouchesOver : bool
    member Arrange : System.Windows.Rect -> unit
    member BeginAnimation : System.Windows.DependencyProperty * System.Windows.Media.Animation.AnimationTimeline -> unit
    member BeginAnimation : System.Windows.DependencyProperty * System.Windows.Media.Animation.AnimationTimeline * System.Windows.Media.Animation.HandoffBehavior -> unit
    member BitmapEffect : System.Windows.Media.Effects.BitmapEffect with get, set
    member BitmapEffectInput : System.Windows.Media.Effects.BitmapEffectInput with get, set
    member CacheMode : System.Windows.Media.CacheMode with get, set
    member CaptureMouse : unit -> bool
    member CaptureStylus : unit -> bool
    member CaptureTouch : System.Windows.Input.TouchDevice -> bool
    member Clip : System.Windows.Media.Geometry with get, set
    member ClipToBounds : bool with get, set
    member CommandBindings : System.Windows.Input.CommandBindingCollection
    member DesiredSize : System.Windows.Size
    member Effect : System.Windows.Media.Effects.Effect with get, set
    member Focus : unit -> bool
    member Focusable : bool with get, set
    member GetAnimationBaseValue : System.Windows.DependencyProperty -> obj
    member HasAnimatedProperties : bool
    member InputBindings : System.Windows.Input.InputBindingCollection
    member InputHitTest : System.Windows.Point -> System.Windows.IInputElement
    member InvalidateArrange : unit -> unit
    member InvalidateMeasure : unit -> unit
    member InvalidateVisual : unit -> unit
    member IsArrangeValid : bool
    member IsEnabled : bool with get, set
    member IsFocused : bool
    member IsHitTestVisible : bool with get, set
    member IsInputMethodEnabled : bool
    member IsKeyboardFocusWithin : bool
    member IsKeyboardFocused : bool
    member IsManipulationEnabled : bool with get, set
    member IsMeasureValid : bool
    member IsMouseCaptureWithin : bool
    member IsMouseCaptured : bool
    member IsMouseDirectlyOver : bool
    member IsMouseOver : bool
    member IsStylusCaptureWithin : bool
    member IsStylusCaptured : bool
    member IsStylusDirectlyOver : bool
    member IsStylusOver : bool
    member IsVisible : bool
    member Measure : System.Windows.Size -> unit
    member MoveFocus : System.Windows.Input.TraversalRequest -> bool
    member Opacity : float with get, set
    member OpacityMask : System.Windows.Media.Brush with get, set
    member PersistId : int
    member PredictFocus : System.Windows.Input.FocusNavigationDirection -> System.Windows.DependencyObject
    member RaiseEvent : System.Windows.RoutedEventArgs -> unit
    member ReleaseAllTouchCaptures : unit -> unit
    member ReleaseMouseCapture : unit -> unit
    member ReleaseStylusCapture : unit -> unit
    member ReleaseTouchCapture : System.Windows.Input.TouchDevice -> bool
    member RemoveHandler : System.Windows.RoutedEvent * System.Delegate -> unit
    member RenderSize : System.Windows.Size with get, set
    member RenderTransform : System.Windows.Media.Transform with get, set
    member RenderTransformOrigin : System.Windows.Point with get, set
    member ShouldSerializeCommandBindings : unit -> bool
    member ShouldSerializeInputBindings : unit -> bool
    member SnapsToDevicePixels : bool with get, set
    member TouchesCaptured : System.Collections.Generic.IEnumerable<System.Windows.Input.TouchDevice>
    member TouchesCapturedWithin : System.Collections.Generic.IEnumerable<System.Windows.Input.TouchDevice>
    member TouchesDirectlyOver : System.Collections.Generic.IEnumerable<System.Windows.Input.TouchDevice>
    member TouchesOver : System.Collections.Generic.IEnumerable<System.Windows.Input.TouchDevice>
    member TranslatePoint : System.Windows.Point * System.Windows.UIElement -> System.Windows.Point
    member Uid : string with get, set
    member UpdateLayout : unit -> unit
    member Visibility : System.Windows.Visibility with get, set
    static val PreviewMouseDownEvent : System.Windows.RoutedEvent
    static val MouseDownEvent : System.Windows.RoutedEvent
    static val PreviewMouseUpEvent : System.Windows.RoutedEvent
    static val MouseUpEvent : System.Windows.RoutedEvent
    static val PreviewMouseLeftButtonDownEvent : System.Windows.RoutedEvent
    static val MouseLeftButtonDownEvent : System.Windows.RoutedEvent
    static val PreviewMouseLeftButtonUpEvent : System.Windows.RoutedEvent
    static val MouseLeftButtonUpEvent : System.Windows.RoutedEvent
    static val PreviewMouseRightButtonDownEvent : System.Windows.RoutedEvent
    static val MouseRightButtonDownEvent : System.Windows.RoutedEvent
    static val PreviewMouseRightButtonUpEvent : System.Windows.RoutedEvent
    static val MouseRightButtonUpEvent : System.Windows.RoutedEvent
    static val PreviewMouseMoveEvent : System.Windows.RoutedEvent
    static val MouseMoveEvent : System.Windows.RoutedEvent
    static val PreviewMouseWheelEvent : System.Windows.RoutedEvent
    static val MouseWheelEvent : System.Windows.RoutedEvent
    static val MouseEnterEvent : System.Windows.RoutedEvent
    static val MouseLeaveEvent : System.Windows.RoutedEvent
    static val GotMouseCaptureEvent : System.Windows.RoutedEvent
    static val LostMouseCaptureEvent : System.Windows.RoutedEvent
    static val QueryCursorEvent : System.Windows.RoutedEvent
    static val PreviewStylusDownEvent : System.Windows.RoutedEvent
    static val StylusDownEvent : System.Windows.RoutedEvent
    static val PreviewStylusUpEvent : System.Windows.RoutedEvent
    static val StylusUpEvent : System.Windows.RoutedEvent
    static val PreviewStylusMoveEvent : System.Windows.RoutedEvent
    static val StylusMoveEvent : System.Windows.RoutedEvent
    static val PreviewStylusInAirMoveEvent : System.Windows.RoutedEvent
    static val StylusInAirMoveEvent : System.Windows.RoutedEvent
    static val StylusEnterEvent : System.Windows.RoutedEvent
    static val StylusLeaveEvent : System.Windows.RoutedEvent
    static val PreviewStylusInRangeEvent : System.Windows.RoutedEvent
    static val StylusInRangeEvent : System.Windows.RoutedEvent
    static val PreviewStylusOutOfRangeEvent : System.Windows.RoutedEvent
    static val StylusOutOfRangeEvent : System.Windows.RoutedEvent
    static val PreviewStylusSystemGestureEvent : System.Windows.RoutedEvent
    static val StylusSystemGestureEvent : System.Windows.RoutedEvent
    static val GotStylusCaptureEvent : System.Windows.RoutedEvent
    static val LostStylusCaptureEvent : System.Windows.RoutedEvent
    static val StylusButtonDownEvent : System.Windows.RoutedEvent
    static val StylusButtonUpEvent : System.Windows.RoutedEvent
    static val PreviewStylusButtonDownEvent : System.Windows.RoutedEvent
    static val PreviewStylusButtonUpEvent : System.Windows.RoutedEvent
    static val PreviewKeyDownEvent : System.Windows.RoutedEvent
    static val KeyDownEvent : System.Windows.RoutedEvent
    static val PreviewKeyUpEvent : System.Windows.RoutedEvent
    static val KeyUpEvent : System.Windows.RoutedEvent
    static val PreviewGotKeyboardFocusEvent : System.Windows.RoutedEvent
    static val GotKeyboardFocusEvent : System.Windows.RoutedEvent
    static val PreviewLostKeyboardFocusEvent : System.Windows.RoutedEvent
    static val LostKeyboardFocusEvent : System.Windows.RoutedEvent
    static val PreviewTextInputEvent : System.Windows.RoutedEvent
    static val TextInputEvent : System.Windows.RoutedEvent
    static val PreviewQueryContinueDragEvent : System.Windows.RoutedEvent
    static val QueryContinueDragEvent : System.Windows.RoutedEvent
    static val PreviewGiveFeedbackEvent : System.Windows.RoutedEvent
    static val GiveFeedbackEvent : System.Windows.RoutedEvent
    static val PreviewDragEnterEvent : System.Windows.RoutedEvent
    static val DragEnterEvent : System.Windows.RoutedEvent
    static val PreviewDragOverEvent : System.Windows.RoutedEvent
    static val DragOverEvent : System.Windows.RoutedEvent
    static val PreviewDragLeaveEvent : System.Windows.RoutedEvent
    static val DragLeaveEvent : System.Windows.RoutedEvent
    static val PreviewDropEvent : System.Windows.RoutedEvent
    static val DropEvent : System.Windows.RoutedEvent
    static val PreviewTouchDownEvent : System.Windows.RoutedEvent
    static val TouchDownEvent : System.Windows.RoutedEvent
    static val PreviewTouchMoveEvent : System.Windows.RoutedEvent
    static val TouchMoveEvent : System.Windows.RoutedEvent
    static val PreviewTouchUpEvent : System.Windows.RoutedEvent
    static val TouchUpEvent : System.Windows.RoutedEvent
    static val GotTouchCaptureEvent : System.Windows.RoutedEvent
    static val LostTouchCaptureEvent : System.Windows.RoutedEvent
    static val TouchEnterEvent : System.Windows.RoutedEvent
    static val TouchLeaveEvent : System.Windows.RoutedEvent
    static val IsMouseDirectlyOverProperty : System.Windows.DependencyProperty
    static val IsMouseOverProperty : System.Windows.DependencyProperty
    static val IsStylusOverProperty : System.Windows.DependencyProperty
    static val IsKeyboardFocusWithinProperty : System.Windows.DependencyProperty
    static val IsMouseCapturedProperty : System.Windows.DependencyProperty
    static val IsMouseCaptureWithinProperty : System.Windows.DependencyProperty
    static val IsStylusDirectlyOverProperty : System.Windows.DependencyProperty
    static val IsStylusCapturedProperty : System.Windows.DependencyProperty
    static val IsStylusCaptureWithinProperty : System.Windows.DependencyProperty
    static val IsKeyboardFocusedProperty : System.Windows.DependencyProperty
    static val AreAnyTouchesDirectlyOverProperty : System.Windows.DependencyProperty
    static val AreAnyTouchesOverProperty : System.Windows.DependencyProperty
    static val AreAnyTouchesCapturedProperty : System.Windows.DependencyProperty
    static val AreAnyTouchesCapturedWithinProperty : System.Windows.DependencyProperty
    static val AllowDropProperty : System.Windows.DependencyProperty
    static val RenderTransformProperty : System.Windows.DependencyProperty
    static val RenderTransformOriginProperty : System.Windows.DependencyProperty
    static val OpacityProperty : System.Windows.DependencyProperty
    static val OpacityMaskProperty : System.Windows.DependencyProperty
    static val BitmapEffectProperty : System.Windows.DependencyProperty
    static val EffectProperty : System.Windows.DependencyProperty
    static val BitmapEffectInputProperty : System.Windows.DependencyProperty
    static val CacheModeProperty : System.Windows.DependencyProperty
    static val UidProperty : System.Windows.DependencyProperty
    static val VisibilityProperty : System.Windows.DependencyProperty
    static val ClipToBoundsProperty : System.Windows.DependencyProperty
    static val ClipProperty : System.Windows.DependencyProperty
    static val SnapsToDevicePixelsProperty : System.Windows.DependencyProperty
    static val GotFocusEvent : System.Windows.RoutedEvent
    static val LostFocusEvent : System.Windows.RoutedEvent
    static val IsFocusedProperty : System.Windows.DependencyProperty
    static val IsEnabledProperty : System.Windows.DependencyProperty
    static val IsHitTestVisibleProperty : System.Windows.DependencyProperty
    static val IsVisibleProperty : System.Windows.DependencyProperty
    static val FocusableProperty : System.Windows.DependencyProperty
    static val IsManipulationEnabledProperty : System.Windows.DependencyProperty
    static val ManipulationStartingEvent : System.Windows.RoutedEvent
    static val ManipulationStartedEvent : System.Windows.RoutedEvent
    static val ManipulationDeltaEvent : System.Windows.RoutedEvent
    static val ManipulationInertiaStartingEvent : System.Windows.RoutedEvent
    static val ManipulationBoundaryFeedbackEvent : System.Windows.RoutedEvent
    static val ManipulationCompletedEvent : System.Windows.RoutedEvent
  end

Full name: System.Windows.UIElement

  type: UIElement
  implements: Composition.DUCE.IResource
  implements: Animation.IAnimatable
  implements: IInputElement
  inherits: Visual
  inherits: DependencyObject
  inherits: Threading.DispatcherObject
val x : 'b
val y : 'c
Multiple overloads
DependencyObject.SetValue(key: DependencyPropertyKey, value: obj) : unit
DependencyObject.SetValue(dp: DependencyProperty, value: obj) : unit
type Canvas =
  class
    inherit System.Windows.Controls.Panel
    new : unit -> System.Windows.Controls.Canvas
    static val LeftProperty : System.Windows.DependencyProperty
    static val TopProperty : System.Windows.DependencyProperty
    static val RightProperty : System.Windows.DependencyProperty
    static val BottomProperty : System.Windows.DependencyProperty
    static member GetBottom : System.Windows.UIElement -> float
    static member GetLeft : System.Windows.UIElement -> float
    static member GetRight : System.Windows.UIElement -> float
    static member GetTop : System.Windows.UIElement -> float
    static member SetBottom : System.Windows.UIElement * float -> unit
    static member SetLeft : System.Windows.UIElement * float -> unit
    static member SetRight : System.Windows.UIElement * float -> unit
    static member SetTop : System.Windows.UIElement * float -> unit
  end

Full name: System.Windows.Controls.Canvas

  type: Canvas
  implements: Composition.DUCE.IResource
  implements: Animation.IAnimatable
  implements: IFrameworkInputElement
  implements: IInputElement
  implements: ComponentModel.ISupportInitialize
  implements: Markup.IHaveResources
  implements: Markup.IQueryAmbient
  implements: Markup.IAddChild
  inherits: Panel
  inherits: FrameworkElement
  inherits: UIElement
  inherits: Visual
  inherits: DependencyObject
  inherits: Threading.DispatcherObject
field Canvas.LeftProperty
field Canvas.TopProperty
val blockSize : float

Full name: Snippet.blockSize

  type: float
  implements: IComparable
  implements: IFormattable
  implements: IConvertible
  implements: IComparable<float>
  implements: IEquatable<float>
  inherits: ValueType
val toPosition : int * int -> float * float

Full name: Snippet.toPosition
val x : int

  type: int
  implements: IComparable
  implements: IFormattable
  implements: IConvertible
  implements: IComparable<int>
  implements: IEquatable<int>
  inherits: ValueType
val y : 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 positionBlock : Block -> unit

Full name: Snippet.positionBlock
val block : Block

  type: Block
  implements: IEquatable<Block>
  implements: Collections.IStructuralEquatable
Block.Rectangle: Rectangle
val positionBlocks : Block list -> unit

Full name: Snippet.positionBlocks
val blocks : Block list

  type: Block list
  implements: Collections.IStructuralEquatable
  implements: IComparable<List<Block>>
  implements: IComparable
  implements: Collections.IStructuralComparable
  implements: Collections.Generic.IEnumerable<Block>
  implements: Collections.IEnumerable
Multiple items
module List

from Microsoft.FSharp.Collections

--------------------

type List<'T> =
  | ( [] )
  | ( :: ) of 'T * 'T list
  with
    interface Collections.IEnumerable
    interface Collections.Generic.IEnumerable<'T>
    member Head : 'T
    member IsEmpty : bool
    member Item : index:int -> 'T with get
    member Length : int
    member Tail : 'T list
    static member Cons : head:'T * tail:'T list -> 'T list
    static member Empty : 'T list
  end

Full name: Microsoft.FSharp.Collections.List<_>

  type: List<'T>
  implements: Collections.IStructuralEquatable
  implements: IComparable<List<'T>>
  implements: IComparable
  implements: Collections.IStructuralComparable
  implements: Collections.Generic.IEnumerable<'T>
  implements: Collections.IEnumerable
val iter : ('T -> unit) -> 'T list -> unit

Full name: Microsoft.FSharp.Collections.List.iter
val positionTetrad : Tetrad -> int * int -> unit

Full name: Snippet.positionTetrad
val tetrad : Tetrad

  type: Tetrad
  implements: IEquatable<Tetrad>
  implements: Collections.IStructuralEquatable
Tetrad.Canvas: Canvas
val createTetrad : (int * int) list * Color * Color -> Tetrad

Full name: Snippet.createTetrad
val coordinates : (int * int) list

  type: (int * int) list
  implements: Collections.IStructuralEquatable
  implements: IComparable<List<int * int>>
  implements: IComparable
  implements: Collections.IStructuralComparable
  implements: Collections.Generic.IEnumerable<int * int>
  implements: Collections.IEnumerable
val stroke : Color

  type: Color
  implements: IFormattable
  implements: IEquatable<Color>
  inherits: ValueType
val fill : Color

  type: Color
  implements: IFormattable
  implements: IEquatable<Color>
  inherits: ValueType
val createRectangle : (unit -> Rectangle)
type Rectangle =
  class
    inherit System.Windows.Shapes.Shape
    new : unit -> System.Windows.Shapes.Rectangle
    member GeometryTransform : System.Windows.Media.Transform
    member RadiusX : float with get, set
    member RadiusY : float with get, set
    member RenderedGeometry : System.Windows.Media.Geometry
    static val RadiusXProperty : System.Windows.DependencyProperty
    static val RadiusYProperty : System.Windows.DependencyProperty
  end

Full name: System.Windows.Shapes.Rectangle

  type: Rectangle
  implements: Composition.DUCE.IResource
  implements: Animation.IAnimatable
  implements: IFrameworkInputElement
  implements: IInputElement
  implements: ComponentModel.ISupportInitialize
  implements: Markup.IHaveResources
  implements: Markup.IQueryAmbient
  inherits: Shape
  inherits: FrameworkElement
  inherits: UIElement
  inherits: Visual
  inherits: DependencyObject
  inherits: Threading.DispatcherObject
type SolidColorBrush =
  class
    inherit System.Windows.Media.Brush
    new : unit -> System.Windows.Media.SolidColorBrush
    new : System.Windows.Media.Color -> System.Windows.Media.SolidColorBrush
    member Clone : unit -> System.Windows.Media.SolidColorBrush
    member CloneCurrentValue : unit -> System.Windows.Media.SolidColorBrush
    member Color : System.Windows.Media.Color with get, set
    static val ColorProperty : System.Windows.DependencyProperty
    static member DeserializeFrom : System.IO.BinaryReader -> obj
  end

Full name: System.Windows.Media.SolidColorBrush

  type: SolidColorBrush
  implements: ISealable
  implements: Animation.IAnimatable
  implements: IFormattable
  implements: Composition.DUCE.IResource
  inherits: Brush
  inherits: Animation.Animatable
  inherits: Freezable
  inherits: DependencyObject
  inherits: Threading.DispatcherObject
val createBlocks : ((int * int) list -> Block list)
val map : ('T -> 'U) -> 'T list -> 'U list

Full name: Microsoft.FSharp.Collections.List.map
val rectangle : Rectangle

  type: Rectangle
  implements: Composition.DUCE.IResource
  implements: Animation.IAnimatable
  implements: IFrameworkInputElement
  implements: IInputElement
  implements: ComponentModel.ISupportInitialize
  implements: Markup.IHaveResources
  implements: Markup.IQueryAmbient
  inherits: Shape
  inherits: FrameworkElement
  inherits: UIElement
  inherits: Visual
  inherits: DependencyObject
  inherits: Threading.DispatcherObject
val composeBlocks : ('a list -> Canvas)
val blocks : 'a list

  type: 'a list
  implements: Collections.IStructuralEquatable
  implements: IComparable<List<'a>>
  implements: IComparable
  implements: Collections.IStructuralComparable
  implements: Collections.Generic.IEnumerable<'a>
  implements: Collections.IEnumerable
val canvas : Canvas

  type: Canvas
  implements: Composition.DUCE.IResource
  implements: Animation.IAnimatable
  implements: IFrameworkInputElement
  implements: IInputElement
  implements: ComponentModel.ISupportInitialize
  implements: Markup.IHaveResources
  implements: Markup.IQueryAmbient
  implements: Markup.IAddChild
  inherits: Panel
  inherits: FrameworkElement
  inherits: UIElement
  inherits: Visual
  inherits: DependencyObject
  inherits: Threading.DispatcherObject
val block : 'a
property Panel.Children: UIElementCollection
UIElementCollection.Add(element: UIElement) : int
val wellWidth : int

Full name: Snippet.wellWidth

  type: int
  implements: IComparable
  implements: IFormattable
  implements: IConvertible
  implements: IComparable<int>
  implements: IEquatable<int>
  inherits: ValueType
val wellHeight : int

Full name: Snippet.wellHeight

  type: int
  implements: IComparable
  implements: IFormattable
  implements: IConvertible
  implements: IComparable<int>
  implements: IEquatable<int>
  inherits: ValueType
type Well =
  class
    new : unit -> Well
    member AddBlock : x:int * y:int -> block:UIElement -> int
    member CheckLines : unit -> unit
    member Clear : unit -> unit
    member Control : Canvas
    member IsBlocked : (int * int -> bool)
  end

Full name: Snippet.Well
val matrix : UIElement option [,]

  type: UIElement option [,]
  implements: ICloneable
  implements: Collections.IList
  implements: Collections.ICollection
  implements: Collections.IEnumerable
  implements: Collections.IStructuralComparable
  implements: Collections.IStructuralEquatable
  inherits: Array
module Array2D

from Microsoft.FSharp.Collections
val create : int -> int -> 'T -> 'T [,]

Full name: Microsoft.FSharp.Collections.Array2D.create
union case Option.None: Option<'T>
val addBlock : (int * int -> UIElement -> int)
val block : UIElement

  type: UIElement
  implements: Composition.DUCE.IResource
  implements: Animation.IAnimatable
  implements: IInputElement
  inherits: Visual
  inherits: DependencyObject
  inherits: Threading.DispatcherObject
union case Option.Some: 'T -> Option<'T>
val clear : (unit -> unit)
val iteri : (int -> int -> 'T -> unit) -> 'T [,] -> unit

Full name: Microsoft.FSharp.Collections.Array2D.iteri
val block : UIElement option

  type: UIElement option
  implements: Collections.IStructuralEquatable
  implements: IComparable<Option<UIElement>>
  implements: IComparable
  implements: Collections.IStructuralComparable
module Option

from Microsoft.FSharp.Core
val iter : ('T -> unit) -> 'T option -> unit

Full name: Microsoft.FSharp.Core.Option.iter
UIElementCollection.Remove(element: UIElement) : unit
val ignore : 'T -> unit

Full name: Microsoft.FSharp.Core.Operators.ignore
val isBlocked : (int * int -> bool)
val exists : ('T -> bool) -> 'T option -> bool

Full name: Microsoft.FSharp.Core.Option.exists
val x : UIElement

  type: UIElement
  implements: Composition.DUCE.IResource
  implements: Animation.IAnimatable
  implements: IInputElement
  inherits: Visual
  inherits: DependencyObject
  inherits: Threading.DispatcherObject
val checkLines : (unit -> unit)
val lineBlockCounts : (int * int) list

  type: (int * int) list
  implements: Collections.IStructuralEquatable
  implements: IComparable<List<int * int>>
  implements: IComparable
  implements: Collections.IStructuralComparable
  implements: Collections.Generic.IEnumerable<int * int>
  implements: Collections.IEnumerable
val count : 'T option -> int

Full name: Microsoft.FSharp.Core.Option.count
val reduce : ('T -> 'T -> 'T) -> 'T list -> 'T

Full name: Microsoft.FSharp.Collections.List.reduce
val clearLine : (int -> unit)
val fallDownTo : (int -> unit)
val i : int

  type: int
  implements: IComparable
  implements: IFormattable
  implements: IConvertible
  implements: IComparable<int>
  implements: IEquatable<int>
  inherits: ValueType
val count : int

  type: int
  implements: IComparable
  implements: IFormattable
  implements: IConvertible
  implements: IComparable<int>
  implements: IEquatable<int>
  inherits: ValueType
val well : Well
member Well.IsBlocked : (int * int -> bool)

Full name: Snippet.Well.IsBlocked
member Well.AddBlock : x:int * y:int -> block:UIElement -> int

Full name: Snippet.Well.AddBlock
member Well.CheckLines : unit -> unit

Full name: Snippet.Well.CheckLines
member Well.Clear : unit -> unit

Full name: Snippet.Well.Clear
Multiple items
member Well.Control : Canvas

Full name: Snippet.Well.Control

--------------------

type Control =
  class
    inherit System.Windows.FrameworkElement
    new : unit -> System.Windows.Controls.Control
    member Background : System.Windows.Media.Brush with get, set
    member BorderBrush : System.Windows.Media.Brush with get, set
    member BorderThickness : System.Windows.Thickness with get, set
    member FontFamily : System.Windows.Media.FontFamily with get, set
    member FontSize : float with get, set
    member FontStretch : System.Windows.FontStretch with get, set
    member FontStyle : System.Windows.FontStyle with get, set
    member FontWeight : System.Windows.FontWeight with get, set
    member Foreground : System.Windows.Media.Brush with get, set
    member HorizontalContentAlignment : System.Windows.HorizontalAlignment with get, set
    member IsTabStop : bool with get, set
    member Padding : System.Windows.Thickness with get, set
    member TabIndex : int with get, set
    member Template : System.Windows.Controls.ControlTemplate with get, set
    member ToString : unit -> string
    member VerticalContentAlignment : System.Windows.VerticalAlignment with get, set
    static val BorderBrushProperty : System.Windows.DependencyProperty
    static val BorderThicknessProperty : System.Windows.DependencyProperty
    static val BackgroundProperty : System.Windows.DependencyProperty
    static val ForegroundProperty : System.Windows.DependencyProperty
    static val FontFamilyProperty : System.Windows.DependencyProperty
    static val FontSizeProperty : System.Windows.DependencyProperty
    static val FontStretchProperty : System.Windows.DependencyProperty
    static val FontStyleProperty : System.Windows.DependencyProperty
    static val FontWeightProperty : System.Windows.DependencyProperty
    static val HorizontalContentAlignmentProperty : System.Windows.DependencyProperty
    static val VerticalContentAlignmentProperty : System.Windows.DependencyProperty
    static val TabIndexProperty : System.Windows.DependencyProperty
    static val IsTabStopProperty : System.Windows.DependencyProperty
    static val PaddingProperty : System.Windows.DependencyProperty
    static val TemplateProperty : System.Windows.DependencyProperty
    static val PreviewMouseDoubleClickEvent : System.Windows.RoutedEvent
    static val MouseDoubleClickEvent : System.Windows.RoutedEvent
  end

Full name: System.Windows.Controls.Control

  type: Control
  implements: Composition.DUCE.IResource
  implements: Animation.IAnimatable
  implements: IFrameworkInputElement
  implements: IInputElement
  implements: ComponentModel.ISupportInitialize
  implements: Markup.IHaveResources
  implements: Markup.IQueryAmbient
  inherits: FrameworkElement
  inherits: UIElement
  inherits: Visual
  inherits: DependencyObject
  inherits: Threading.DispatcherObject
type GameControl =
  class
    inherit UserControl
    new : unit -> GameControl
  end

Full name: Snippet.GameControl

  type: GameControl
  implements: Composition.DUCE.IResource
  implements: Animation.IAnimatable
  implements: IFrameworkInputElement
  implements: IInputElement
  implements: ComponentModel.ISupportInitialize
  implements: Markup.IHaveResources
  implements: Markup.IQueryAmbient
  implements: Markup.IAddChild
  inherits: UserControl
  inherits: ContentControl
  inherits: Control
  inherits: FrameworkElement
  inherits: UIElement
  inherits: Visual
  inherits: DependencyObject
  inherits: Threading.DispatcherObject
val this : GameControl

  type: GameControl
  implements: Composition.DUCE.IResource
  implements: Animation.IAnimatable
  implements: IFrameworkInputElement
  implements: IInputElement
  implements: ComponentModel.ISupportInitialize
  implements: Markup.IHaveResources
  implements: Markup.IQueryAmbient
  implements: Markup.IAddChild
  inherits: UserControl
  inherits: ContentControl
  inherits: Control
  inherits: FrameworkElement
  inherits: UIElement
  inherits: Visual
  inherits: DependencyObject
  inherits: Threading.DispatcherObject
type UserControl =
  class
    inherit System.Windows.Controls.ContentControl
    new : unit -> System.Windows.Controls.UserControl
  end

Full name: System.Windows.Controls.UserControl

  type: UserControl
  implements: Composition.DUCE.IResource
  implements: Animation.IAnimatable
  implements: IFrameworkInputElement
  implements: IInputElement
  implements: ComponentModel.ISupportInitialize
  implements: Markup.IHaveResources
  implements: Markup.IQueryAmbient
  implements: Markup.IAddChild
  inherits: ContentControl
  inherits: Control
  inherits: FrameworkElement
  inherits: UIElement
  inherits: Visual
  inherits: DependencyObject
  inherits: Threading.DispatcherObject
val keys : KeyState
type KeyState =
  class
    new : control:Control -> KeyState
    member IsAnyKeyDwn : unit -> bool
    member IsKeyDown : key:Key -> bool
    member ReadKeyPressed : key:Key -> bool
    member ReadKeyPresses : key:Key -> int
  end

Full name: Snippet.KeyState
property Colors.Black: Color
property Well.Control: Canvas
val layout : Grid

  type: Grid
  implements: Composition.DUCE.IResource
  implements: Animation.IAnimatable
  implements: IFrameworkInputElement
  implements: IInputElement
  implements: ComponentModel.ISupportInitialize
  implements: Markup.IHaveResources
  implements: Markup.IQueryAmbient
  implements: Markup.IAddChild
  inherits: Panel
  inherits: FrameworkElement
  inherits: UIElement
  inherits: Visual
  inherits: DependencyObject
  inherits: Threading.DispatcherObject
type Grid =
  class
    inherit System.Windows.Controls.Panel
    new : unit -> System.Windows.Controls.Grid
    member ColumnDefinitions : System.Windows.Controls.ColumnDefinitionCollection
    member RowDefinitions : System.Windows.Controls.RowDefinitionCollection
    member ShouldSerializeColumnDefinitions : unit -> bool
    member ShouldSerializeRowDefinitions : unit -> bool
    member ShowGridLines : bool with get, set
    static val ShowGridLinesProperty : System.Windows.DependencyProperty
    static val ColumnProperty : System.Windows.DependencyProperty
    static val RowProperty : System.Windows.DependencyProperty
    static val ColumnSpanProperty : System.Windows.DependencyProperty
    static val RowSpanProperty : System.Windows.DependencyProperty
    static val IsSharedSizeScopeProperty : System.Windows.DependencyProperty
    static member GetColumn : System.Windows.UIElement -> int
    static member GetColumnSpan : System.Windows.UIElement -> int
    static member GetIsSharedSizeScope : System.Windows.UIElement -> bool
    static member GetRow : System.Windows.UIElement -> int
    static member GetRowSpan : System.Windows.UIElement -> int
    static member SetColumn : System.Windows.UIElement * int -> unit
    static member SetColumnSpan : System.Windows.UIElement * int -> unit
    static member SetIsSharedSizeScope : System.Windows.UIElement * bool -> unit
    static member SetRow : System.Windows.UIElement * int -> unit
    static member SetRowSpan : System.Windows.UIElement * int -> unit
  end

Full name: System.Windows.Controls.Grid

  type: Grid
  implements: Composition.DUCE.IResource
  implements: Animation.IAnimatable
  implements: IFrameworkInputElement
  implements: IInputElement
  implements: ComponentModel.ISupportInitialize
  implements: Markup.IHaveResources
  implements: Markup.IQueryAmbient
  implements: Markup.IAddChild
  inherits: Panel
  inherits: FrameworkElement
  inherits: UIElement
  inherits: Visual
  inherits: DependencyObject
  inherits: Threading.DispatcherObject
property ContentControl.Content: obj
val isTetradBlocked : (Tetrad -> int * int -> bool)
val exists : ('T -> bool) -> 'T list -> bool

Full name: Microsoft.FSharp.Collections.List.exists
property Well.IsBlocked: int * int -> bool
val rotateTetrad : (Tetrad -> Tetrad)
val controlTetrad : (Tetrad ref -> int ref * int ref -> unit)
val tetrad : Tetrad ref

  type: Tetrad ref
  implements: Collections.IStructuralEquatable
  implements: IComparable<Ref<Tetrad>>
  implements: IComparable
  implements: Collections.IStructuralComparable
val x : int ref

  type: int ref
  implements: Collections.IStructuralEquatable
  implements: IComparable<Ref<int>>
  implements: IComparable
  implements: Collections.IStructuralComparable
val y : int ref

  type: int ref
  implements: Collections.IStructuralEquatable
  implements: IComparable<Ref<int>>
  implements: IComparable
  implements: Collections.IStructuralComparable
val dx : int

  type: int
  implements: IComparable
  implements: IFormattable
  implements: IConvertible
  implements: IComparable<int>
  implements: IEquatable<int>
  inherits: ValueType
member KeyState.ReadKeyPresses : key:Key -> int
type Key =
  | None = 0
  | Cancel = 1
  | Back = 2
  | Tab = 3
  | LineFeed = 4
  | Clear = 5
  | Return = 6
  | Enter = 6
  | Pause = 7
  | Capital = 8
  | CapsLock = 8
  | KanaMode = 9
  | HangulMode = 9
  | JunjaMode = 10
  | FinalMode = 11
  | HanjaMode = 12
  | KanjiMode = 12
  | Escape = 13
  | ImeConvert = 14
  | ImeNonConvert = 15
  | ImeAccept = 16
  | ImeModeChange = 17
  | Space = 18
  | Prior = 19
  | PageUp = 19
  | Next = 20
  | PageDown = 20
  | End = 21
  | Home = 22
  | Left = 23
  | Up = 24
  | Right = 25
  | Down = 26
  | Select = 27
  | Print = 28
  | Execute = 29
  | Snapshot = 30
  | PrintScreen = 30
  | Insert = 31
  | Delete = 32
  | Help = 33
  | D0 = 34
  | D1 = 35
  | D2 = 36
  | D3 = 37
  | D4 = 38
  | D5 = 39
  | D6 = 40
  | D7 = 41
  | D8 = 42
  | D9 = 43
  | A = 44
  | B = 45
  | C = 46
  | D = 47
  | E = 48
  | F = 49
  | G = 50
  | H = 51
  | I = 52
  | J = 53
  | K = 54
  | L = 55
  | M = 56
  | N = 57
  | O = 58
  | P = 59
  | Q = 60
  | R = 61
  | S = 62
  | T = 63
  | U = 64
  | V = 65
  | W = 66
  | X = 67
  | Y = 68
  | Z = 69
  | LWin = 70
  | RWin = 71
  | Apps = 72
  | Sleep = 73
  | NumPad0 = 74
  | NumPad1 = 75
  | NumPad2 = 76
  | NumPad3 = 77
  | NumPad4 = 78
  | NumPad5 = 79
  | NumPad6 = 80
  | NumPad7 = 81
  | NumPad8 = 82
  | NumPad9 = 83
  | Multiply = 84
  | Add = 85
  | Separator = 86
  | Subtract = 87
  | Decimal = 88
  | Divide = 89
  | F1 = 90
  | F2 = 91
  | F3 = 92
  | F4 = 93
  | F5 = 94
  | F6 = 95
  | F7 = 96
  | F8 = 97
  | F9 = 98
  | F10 = 99
  | F11 = 100
  | F12 = 101
  | F13 = 102
  | F14 = 103
  | F15 = 104
  | F16 = 105
  | F17 = 106
  | F18 = 107
  | F19 = 108
  | F20 = 109
  | F21 = 110
  | F22 = 111
  | F23 = 112
  | F24 = 113
  | NumLock = 114
  | Scroll = 115
  | LeftShift = 116
  | RightShift = 117
  | LeftCtrl = 118
  | RightCtrl = 119
  | LeftAlt = 120
  | RightAlt = 121
  | BrowserBack = 122
  | BrowserForward = 123
  | BrowserRefresh = 124
  | BrowserStop = 125
  | BrowserSearch = 126
  | BrowserFavorites = 127
  | BrowserHome = 128
  | VolumeMute = 129
  | VolumeDown = 130
  | VolumeUp = 131
  | MediaNextTrack = 132
  | MediaPreviousTrack = 133
  | MediaStop = 134
  | MediaPlayPause = 135
  | LaunchMail = 136
  | SelectMedia = 137
  | LaunchApplication1 = 138
  | LaunchApplication2 = 139
  | Oem1 = 140
  | OemSemicolon = 140
  | OemPlus = 141
  | OemComma = 142
  | OemMinus = 143
  | OemPeriod = 144
  | Oem2 = 145
  | OemQuestion = 145
  | Oem3 = 146
  | OemTilde = 146
  | AbntC1 = 147
  | AbntC2 = 148
  | Oem4 = 149
  | OemOpenBrackets = 149
  | Oem5 = 150
  | OemPipe = 150
  | Oem6 = 151
  | OemCloseBrackets = 151
  | Oem7 = 152
  | OemQuotes = 152
  | Oem8 = 153
  | Oem102 = 154
  | OemBackslash = 154
  | ImeProcessed = 155
  | System = 156
  | OemAttn = 157
  | DbeAlphanumeric = 157
  | OemFinish = 158
  | DbeKatakana = 158
  | OemCopy = 159
  | DbeHiragana = 159
  | OemAuto = 160
  | DbeSbcsChar = 160
  | OemEnlw = 161
  | DbeDbcsChar = 161
  | OemBackTab = 162
  | DbeRoman = 162
  | Attn = 163
  | DbeNoRoman = 163
  | CrSel = 164
  | DbeEnterWordRegisterMode = 164
  | ExSel = 165
  | DbeEnterImeConfigureMode = 165
  | EraseEof = 166
  | DbeFlushString = 166
  | Play = 167
  | DbeCodeInput = 167
  | Zoom = 168
  | DbeNoCodeInput = 168
  | NoName = 169
  | DbeDetermineString = 169
  | Pa1 = 170
  | DbeEnterDialogConversionMode = 170
  | OemClear = 171
  | DeadCharProcessed = 172

Full name: System.Windows.Input.Key

  type: Key
  inherits: Enum
  inherits: ValueType
field Key.Right = 25
field Key.Left = 23
val sign : 'T -> int (requires member get_Sign)

Full name: Microsoft.FSharp.Core.Operators.sign
val rotate : bool

  type: bool
  implements: IComparable
  implements: IConvertible
  implements: IComparable<bool>
  implements: IEquatable<bool>
  inherits: ValueType
member KeyState.ReadKeyPressed : key:Key -> bool
field Key.Up = 24
val newTetrad : Tetrad

  type: Tetrad
  implements: IEquatable<Tetrad>
  implements: Collections.IStructuralEquatable
val not : bool -> bool

Full name: Microsoft.FSharp.Core.Operators.not
val dockTetrad : (Tetrad -> int * int -> unit)
val x' : int

  type: int
  implements: IComparable
  implements: IFormattable
  implements: IConvertible
  implements: IComparable<int>
  implements: IEquatable<int>
  inherits: ValueType
val y' : int

  type: int
  implements: IComparable
  implements: IFormattable
  implements: IConvertible
  implements: IComparable<int>
  implements: IEquatable<int>
  inherits: ValueType
member Well.AddBlock : x:int * y:int -> block:UIElement -> int
val playTetrad : (Tetrad ref -> int ref * int ref -> Async<unit>)
val async : AsyncBuilder

Full name: Microsoft.FSharp.Core.ExtraTopLevelOperators.async
val speed : 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
Multiple items
type Async<'T>

Full name: Microsoft.FSharp.Control.Async<_>

--------------------

type Async
with
  static member AsBeginEnd : computation:('Arg -> Async<'T>) -> ('Arg * AsyncCallback * obj -> IAsyncResult) * (IAsyncResult -> 'T) * (IAsyncResult -> unit)
  static member AwaitEvent : event:IEvent<'Del,'T> * ?cancelAction:(unit -> unit) -> Async<'T> (requires delegate and 'Del :> Delegate)
  static member AwaitIAsyncResult : iar:IAsyncResult * ?millisecondsTimeout:int -> Async<bool>
  static member AwaitTask : task:Threading.Tasks.Task<'T> -> Async<'T>
  static member AwaitWaitHandle : waitHandle:Threading.WaitHandle * ?millisecondsTimeout:int -> Async<bool>
  static member CancelDefaultToken : unit -> unit
  static member Catch : computation:Async<'T> -> Async<Choice<'T,exn>>
  static member FromBeginEnd : beginAction:(AsyncCallback * obj -> IAsyncResult) * endAction:(IAsyncResult -> 'T) * ?cancelAction:(unit -> unit) -> Async<'T>
  static member FromBeginEnd : arg:'Arg1 * beginAction:('Arg1 * AsyncCallback * obj -> IAsyncResult) * endAction:(IAsyncResult -> 'T) * ?cancelAction:(unit -> unit) -> Async<'T>
  static member FromBeginEnd : arg1:'Arg1 * arg2:'Arg2 * beginAction:('Arg1 * 'Arg2 * AsyncCallback * obj -> IAsyncResult) * endAction:(IAsyncResult -> 'T) * ?cancelAction:(unit -> unit) -> Async<'T>
  static member FromBeginEnd : arg1:'Arg1 * arg2:'Arg2 * arg3:'Arg3 * beginAction:('Arg1 * 'Arg2 * 'Arg3 * AsyncCallback * obj -> IAsyncResult) * endAction:(IAsyncResult -> 'T) * ?cancelAction:(unit -> unit) -> Async<'T>
  static member FromContinuations : callback:(('T -> unit) * (exn -> unit) * (OperationCanceledException -> unit) -> unit) -> Async<'T>
  static member Ignore : computation:Async<'T> -> Async<unit>
  static member OnCancel : interruption:(unit -> unit) -> Async<IDisposable>
  static member Parallel : computations:seq<Async<'T>> -> Async<'T []>
  static member RunSynchronously : computation:Async<'T> * ?timeout:int * ?cancellationToken:Threading.CancellationToken -> 'T
  static member Sleep : millisecondsDueTime:int -> Async<unit>
  static member Start : computation:Async<unit> * ?cancellationToken:Threading.CancellationToken -> unit
  static member StartAsTask : computation:Async<'T> * ?taskCreationOptions:Threading.Tasks.TaskCreationOptions * ?cancellationToken:Threading.CancellationToken -> Threading.Tasks.Task<'T>
  static member StartChild : computation:Async<'T> * ?millisecondsTimeout:int -> Async<Async<'T>>
  static member StartChildAsTask : computation:Async<'T> * ?taskCreationOptions:Threading.Tasks.TaskCreationOptions -> Async<Threading.Tasks.Task<'T>>
  static member StartImmediate : computation:Async<unit> * ?cancellationToken:Threading.CancellationToken -> unit
  static member StartWithContinuations : computation:Async<'T> * continuation:('T -> unit) * exceptionContinuation:(exn -> unit) * cancellationContinuation:(OperationCanceledException -> unit) * ?cancellationToken:Threading.CancellationToken -> unit
  static member SwitchToContext : syncContext:Threading.SynchronizationContext -> Async<unit>
  static member SwitchToNewThread : unit -> Async<unit>
  static member SwitchToThreadPool : unit -> Async<unit>
  static member TryCancelled : computation:Async<'T> * compensation:(OperationCanceledException -> unit) -> Async<'T>
  static member CancellationToken : Async<Threading.CancellationToken>
  static member DefaultCancellationToken : Threading.CancellationToken
end

Full name: Microsoft.FSharp.Control.Async
static member Async.Sleep : millisecondsDueTime:int -> Async<unit>
field Key.Down = 26
val incr : int ref -> unit

Full name: Microsoft.FSharp.Core.Operators.incr
val rand : Random
type Random =
  class
    new : unit -> System.Random
    new : int -> System.Random
    member Next : unit -> int
    member Next : int -> int
    member Next : int * int -> int
    member NextBytes : System.Byte [] -> unit
    member NextDouble : unit -> float
  end

Full name: System.Random
val inGameLoop : (unit -> Async<unit>)
val index : int

  type: int
  implements: IComparable
  implements: IFormattable
  implements: IConvertible
  implements: IComparable<int>
  implements: IEquatable<int>
  inherits: ValueType
Multiple overloads
Random.Next() : int
Random.Next(maxValue: int) : int
Random.Next(minValue: int, maxValue: int) : int
property List.Length: int
member Well.CheckLines : unit -> unit
val message : (string -> TextBlock)
val s : string

  type: string
  implements: IComparable
  implements: ICloneable
  implements: IConvertible
  implements: IComparable<string>
  implements: seq<char>
  implements: Collections.IEnumerable
  implements: IEquatable<string>
type TextBlock =
  class
    inherit System.Windows.FrameworkElement
    new : unit -> System.Windows.Controls.TextBlock
    new : System.Windows.Documents.Inline -> System.Windows.Controls.TextBlock
    member Background : System.Windows.Media.Brush with get, set
    member BaselineOffset : float with get, set
    member BreakAfter : System.Windows.LineBreakCondition
    member BreakBefore : System.Windows.LineBreakCondition
    member ContentEnd : System.Windows.Documents.TextPointer
    member ContentStart : System.Windows.Documents.TextPointer
    member FontFamily : System.Windows.Media.FontFamily with get, set
    member FontSize : float with get, set
    member FontStretch : System.Windows.FontStretch with get, set
    member FontStyle : System.Windows.FontStyle with get, set
    member FontWeight : System.Windows.FontWeight with get, set
    member Foreground : System.Windows.Media.Brush with get, set
    member GetPositionFromPoint : System.Windows.Point * bool -> System.Windows.Documents.TextPointer
    member Inlines : System.Windows.Documents.InlineCollection
    member IsHyphenationEnabled : bool with get, set
    member LineHeight : float with get, set
    member LineStackingStrategy : System.Windows.LineStackingStrategy with get, set
    member Padding : System.Windows.Thickness with get, set
    member ShouldSerializeBaselineOffset : unit -> bool
    member ShouldSerializeInlines : System.Windows.Markup.XamlDesignerSerializationManager -> bool
    member ShouldSerializeText : unit -> bool
    member Text : string with get, set
    member TextAlignment : System.Windows.TextAlignment with get, set
    member TextDecorations : System.Windows.TextDecorationCollection with get, set
    member TextEffects : System.Windows.Media.TextEffectCollection with get, set
    member TextTrimming : System.Windows.TextTrimming with get, set
    member TextWrapping : System.Windows.TextWrapping with get, set
    member Typography : System.Windows.Documents.Typography
    static val BaselineOffsetProperty : System.Windows.DependencyProperty
    static val TextProperty : System.Windows.DependencyProperty
    static val FontFamilyProperty : System.Windows.DependencyProperty
    static val FontStyleProperty : System.Windows.DependencyProperty
    static val FontWeightProperty : System.Windows.DependencyProperty
    static val FontStretchProperty : System.Windows.DependencyProperty
    static val FontSizeProperty : System.Windows.DependencyProperty
    static val ForegroundProperty : System.Windows.DependencyProperty
    static val BackgroundProperty : System.Windows.DependencyProperty
    static val TextDecorationsProperty : System.Windows.DependencyProperty
    static val TextEffectsProperty : System.Windows.DependencyProperty
    static val LineHeightProperty : System.Windows.DependencyProperty
    static val LineStackingStrategyProperty : System.Windows.DependencyProperty
    static val PaddingProperty : System.Windows.DependencyProperty
    static val TextAlignmentProperty : System.Windows.DependencyProperty
    static val TextTrimmingProperty : System.Windows.DependencyProperty
    static val TextWrappingProperty : System.Windows.DependencyProperty
    static val IsHyphenationEnabledProperty : System.Windows.DependencyProperty
    static member GetBaselineOffset : System.Windows.DependencyObject -> float
    static member GetFontFamily : System.Windows.DependencyObject -> System.Windows.Media.FontFamily
    static member GetFontSize : System.Windows.DependencyObject -> float
    static member GetFontStretch : System.Windows.DependencyObject -> System.Windows.FontStretch
    static member GetFontStyle : System.Windows.DependencyObject -> System.Windows.FontStyle
    static member GetFontWeight : System.Windows.DependencyObject -> System.Windows.FontWeight
    static member GetForeground : System.Windows.DependencyObject -> System.Windows.Media.Brush
    static member GetLineHeight : System.Windows.DependencyObject -> float
    static member GetLineStackingStrategy : System.Windows.DependencyObject -> System.Windows.LineStackingStrategy
    static member GetTextAlignment : System.Windows.DependencyObject -> System.Windows.TextAlignment
    static member SetBaselineOffset : System.Windows.DependencyObject * float -> unit
    static member SetFontFamily : System.Windows.DependencyObject * System.Windows.Media.FontFamily -> unit
    static member SetFontSize : System.Windows.DependencyObject * float -> unit
    static member SetFontStretch : System.Windows.DependencyObject * System.Windows.FontStretch -> unit
    static member SetFontStyle : System.Windows.DependencyObject * System.Windows.FontStyle -> unit
    static member SetFontWeight : System.Windows.DependencyObject * System.Windows.FontWeight -> unit
    static member SetForeground : System.Windows.DependencyObject * System.Windows.Media.Brush -> unit
    static member SetLineHeight : System.Windows.DependencyObject * float -> unit
    static member SetLineStackingStrategy : System.Windows.DependencyObject * System.Windows.LineStackingStrategy -> unit
    static member SetTextAlignment : System.Windows.DependencyObject * System.Windows.TextAlignment -> unit
  end

Full name: System.Windows.Controls.TextBlock

  type: TextBlock
  implements: Composition.DUCE.IResource
  implements: Animation.IAnimatable
  implements: IFrameworkInputElement
  implements: IInputElement
  implements: ComponentModel.ISupportInitialize
  implements: Markup.IHaveResources
  implements: Markup.IQueryAmbient
  implements: IContentHost
  implements: Markup.IAddChildInternal
  implements: Markup.IAddChild
  implements: IServiceProvider
  inherits: FrameworkElement
  inherits: UIElement
  inherits: Visual
  inherits: DependencyObject
  inherits: Threading.DispatcherObject
namespace System.Text
type HorizontalAlignment =
  | Left = 0
  | Center = 1
  | Right = 2
  | Stretch = 3

Full name: System.Windows.HorizontalAlignment

  type: HorizontalAlignment
  inherits: Enum
  inherits: ValueType
field HorizontalAlignment.Center = 1
type VerticalAlignment =
  | Top = 0
  | Center = 1
  | Bottom = 2
  | Stretch = 3

Full name: System.Windows.VerticalAlignment

  type: VerticalAlignment
  inherits: Enum
  inherits: ValueType
field VerticalAlignment.Center = 1
val prompt : (string -> (unit -> Async<unit>) -> Async<unit>)
val text : string

  type: string
  implements: IComparable
  implements: ICloneable
  implements: IConvertible
  implements: IComparable<string>
  implements: seq<char>
  implements: Collections.IEnumerable
  implements: IEquatable<string>
val action : (unit -> Async<unit>)
val start : TextBlock

  type: TextBlock
  implements: Composition.DUCE.IResource
  implements: Animation.IAnimatable
  implements: IFrameworkInputElement
  implements: IInputElement
  implements: ComponentModel.ISupportInitialize
  implements: Markup.IHaveResources
  implements: Markup.IQueryAmbient
  implements: IContentHost
  implements: Markup.IAddChildInternal
  implements: Markup.IAddChild
  implements: IServiceProvider
  inherits: FrameworkElement
  inherits: UIElement
  inherits: Visual
  inherits: DependencyObject
  inherits: Threading.DispatcherObject
val awaitClick : (unit -> Async<unit>)
event UIElement.MouseLeftButtonDown: IEvent<MouseButtonEventHandler,MouseButtonEventArgs>
static member Async.AwaitEvent : event:IEvent<'Del,'T> * ?cancelAction:(unit -> unit) -> Async<'T> (requires delegate and 'Del :> Delegate)
static member Async.Ignore : computation:Async<'T> -> Async<unit>
val pause : (unit -> Async<unit>)
val gameLoop : (unit -> Async<'a>)
member Well.Clear : unit -> unit
static member Async.StartImmediate : computation:Async<unit> * ?cancellationToken:Threading.CancellationToken -> unit
#if INTERACTIVE
open Microsoft.TryFSharp
App.Dispatch (fun() ->
    App.Console.ClearCanvas()
    let canvas = App.Console.Canvas
    let control = GameControl()
    control |> canvas.Children.Add
    App.Console.CanvasPosition <- CanvasPosition.Right
    control.Focus() |> ignore
)
#endif

More information

Link: http://fssnip.net/5W
Posted: 3 years ago
Author: Phillip Trelford (website)
Tags: Game, Silverlight, Async