Last active
December 27, 2018 15:42
-
-
Save joelonsql/785ba339da3f709b47f77ea2fdcab8ad to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(* Original OCaml code: *) | |
let flatten_transitions : StateSet.t CharSetMap.t -> StateSet.t CharMap.t = | |
fun char_map -> | |
CharSetMap.fold | |
(fun char_set state_set char_map -> | |
CharSet.fold | |
(fun char char_map -> | |
let entry = match CharMap.find char char_map with | |
| exception Not_found -> StateSet.empty | |
| state_set -> state_set in | |
CharMap.add char (StateSet.union state_set entry) char_map) | |
char_set | |
char_map) | |
char_map | |
CharMap.empty | |
(* Reason code produced by bsrefmt from OCaml: *) | |
let flatten_transitions: CharSetMap.t(StateSet.t) => CharMap.t(StateSet.t) = | |
char_map => | |
CharSetMap.fold( | |
(char_set, state_set, char_map) => | |
CharSet.fold( | |
(char, char_map) => { | |
let entry = | |
switch (CharMap.find(char, char_map)) { | |
| exception Not_found => StateSet.empty | |
| state_set => state_set | |
}; | |
CharMap.add(char, StateSet.union(state_set, entry), char_map); | |
}, | |
char_set, | |
char_map, | |
), | |
char_map, | |
CharMap.empty, | |
); | |
(* Looks nice! But not so nice when trying to convert back to OCaml from Reason using bsrefmt: *) | |
let flatten_transitions: StateSet.t CharSetMap.t -> StateSet.t CharMap.t = | |
fun char_map -> | |
CharSetMap.fold | |
(fun char_set -> | |
fun state_set -> | |
fun char_map -> | |
CharSet.fold | |
(fun char -> | |
fun char_map -> | |
let entry = | |
match CharMap.find char char_map with | |
| exception Not_found -> StateSet.empty | |
| state_set -> state_set in | |
CharMap.add char (StateSet.union state_set entry) | |
char_map) char_set char_map) char_map CharMap.empty | |
(* Which is the same thing, but doesn't look very nice. *) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment