Hi,

Make the types more specific and after all compiles start removing the types constraints and let type inference kick in.

Is that helpful ? :)

The code below builds and runs:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#light

open System

type ITuple =
    abstract Timestamp : DateTime

type Stocks(timestamp, company, price) =
    member e.Company = company
    member e.Price = price

    override e.ToString() = sprintf "%A" (company, price)

    interface ITuple with
        member e.Timestamp = timestamp

type Stream(parent : Stream option) =
    let triggerUpdate, update = Event.create()
    let mutable tuples = []

    member self.Update : IEvent<Stocks> = update
    member self.add(item : Stocks) : unit = tuples <- item :: tuples

                                            triggerUpdate item
    member self.groupby(part) =                               
        let result = GroupMap<'group>(part)
        self.Update.Add(fun t -> result.add(t))
        result

    override self.ToString() = sprintf "%A" tuples

and GroupMap<'group>(partitioner) =
    let mutable map : Map<'group, Stream> = Map.empty

    member self.add(tuple) =
        let g = partitioner(tuple)
        if (not( map.ContainsKey(g) )) then 
            map <- map.Add (g, Stream(parent = None))
            map.[g].add(tuple)
        else
            map.[g].add(tuple)

let x = Stream(parent = None)
let groupped : GroupMap<string> = x.groupby((fun t -> t.Company))

for i in seq { 1 .. 5 } do
    x.add(Stocks(DateTime.Now, "AAPL", i))
    x.add(Stocks(DateTime.Now, "IBM", i))
By on 10/27/2008 3:21 PM ()
IntelliFactory Offices Copyright (c) 2011-2012 IntelliFactory. All rights reserved.
Home | Products | Consulting | Trainings | Blogs | Jobs | Contact Us | Terms of Use | Privacy Policy | Cookie Policy
Built with WebSharper