Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.38 KB | None | 0 0
  1. open System
  2. type User = string
  3. type Title = string
  4. type BugState =
  5. | New
  6. | Assigned of User
  7. | Deferred
  8. | Closed
  9. type Bug =
  10. { Id : Guid
  11. Title : Title
  12. State : BugState
  13. }
  14.  
  15. let sendEmailToAssignee assignee message bug =
  16. printfn "@%s, RE %s: %s" assignee bug.Title message
  17. bug
  18.  
  19. type Trigger =
  20. | Assign of User
  21. | Defer
  22. | Close
  23.  
  24. let cantApply trigger bug =
  25. printfn "ERROR: Can't apply trigger %A to ticket in state %A" trigger bug.State
  26. bug
  27. let FSM trigger bug =
  28. match bug.State, trigger with
  29. | Assigned oldUser, Assign newUser when oldUser <> newUser ->
  30. { bug with State = Assigned newUser }
  31. |> sendEmailToAssignee oldUser "Don't forget to help the new employee!"
  32. |> sendEmailToAssignee newUser "You own it."
  33.  
  34. | New, Assign user
  35. | Deferred, Assign user ->
  36. { bug with State = Assigned user }
  37. |> sendEmailToAssignee user "You own it."
  38.  
  39. | New, Defer ->
  40. { bug with State = Deferred }
  41. | Assigned user, Defer ->
  42. sendEmailToAssignee user "You're off the hook."
  43. { bug with State = Deferred }
  44.  
  45. | Assigned _, Close ->
  46. { bug with State = Closed }
  47. | _, _ ->
  48. cantApply trigger bug
  49.  
  50.  
  51. { Id = Guid.NewGuid()
  52. Title = "Incorrect stock count"
  53. State = New }
  54. |> FSM (Assign "Joe")
  55. |> FSM Defer
  56. |> FSM (Assign "Harry")
  57. |> FSM (Assign "Fred")
  58. |> FSM Close
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement