Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module Phantom
  2.  
  3. type Reader = interface end
  4. type Writer = interface end
  5.  
  6. type Agent<'T> = Agent of string
  7.  
  8. let makeReader name : Agent<Reader> = Agent name
  9. let makeWriter name : Agent<Writer> = Agent name
  10.  
  11. let allAgents (a:Agent<_>) = match a with | Agent name -> printfn "Agent %s visiting." name
  12. let onlyWriters (a:Agent<Writer>) = match a with | Agent name -> printfn "Agent %s writing." name
  13.  
  14. let main () =
  15.     let r = makeReader "reader"
  16.     let w = makeWriter "writer"
  17.     allAgents r
  18.     allAgents w
  19.     onlyWriters r
  20.     onlyWriters w
  21.    
  22. do main ()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement