-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathProgram.fs
62 lines (46 loc) · 1.4 KB
/
Program.fs
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// Learn more about F# at http://docs.microsoft.com/dotnet/fsharp
open System
open Memstate
open Memstate.JsonNet
type Tweet =
{ Id: int
Message: string
}
type TwitterModel() =
let tweets = ResizeArray()
member this.Tweets = Seq.toList tweets
member this.PostTweet(msg: string) =
let tweet = { Tweet.Id = 1; Message = msg }
tweets.Add(tweet)
tweet
// Events
type Tweeted(tweet: Tweet) =
inherit Event()
// Commands
type PostTweet(msg: string) =
inherit Command<TwitterModel, int>()
member this.Msg: string = msg
override Command.Execute(model: TwitterModel): int =
let tweet = model.PostTweet msg
Command.RaiseEvent (new Tweeted(tweet))
tweet.Id
// Query
type AllTweets() =
inherit Query<TwitterModel, Tweet list>()
override Query.Execute(model: TwitterModel) =
model.Tweets
[<EntryPoint>]
let main argv =
// TODO: understand concepts used
printfn "Begin"
async {
let! engine = Engine.Start<TwitterModel>() |> Async.AwaitTask
let cmd = new PostTweet("Hello world")
let! res = engine.Execute(cmd) |> Async.AwaitTask
printfn "res: %d" res
let query = new AllTweets()
let! allTweets = engine.Execute(query) |> Async.AwaitTask
printfn "%A" allTweets
printfn "Fin."
} |> Async.RunSynchronously
0 // return an integer exit code