OSDN Git Service

add writer monad
[happyabc/happyabc.git] / debugger / writerTest.ml
1 open Base
2 open OUnit
3
4 module ListMonoid = struct
5   type 'a t = 'a list
6   let mempty = []
7   let mappend = (@)
8 end
9
10 module StrMonoid = struct
11   type 'a t = string
12   let mempty = ""
13   let mappend = (^)
14 end
15
16 module W = Writer.Make(ListMonoid)
17 module W2 = Writer.Make(StrMonoid)
18 open W
19
20 let _ = begin "writer.ml" >::: [
21   "tell" >:: begin fun () ->
22     let m =
23       perform with module W in begin
24         tell ["hi"];
25         tell ["ho"];
26         ret ()
27       end in
28     assert_equal () @@ fst @@ runWriter m;
29     assert_equal ["hi"; "ho"] @@ snd @@ runWriter m
30   end;
31   "with_str" >:: begin fun () ->
32     open W2 in
33     let m =
34       perform with module W2 in begin
35         tell "hi";
36         tell "ho";
37         ret ()
38       end in
39     assert_equal () @@ fst @@ runWriter m;
40     assert_equal "hiho" @@ snd @@ runWriter m
41   end
42 ] end +> run_test_tt_main