import Cocoa import Doubt func readFile(path: String) -> String? { guard let data = try? NSString(contentsOfFile: path, encoding: NSUTF8StringEncoding) else { return nil } return data as String? } typealias Term = Cofree> func termWithInput(string: String) -> Term? { let document = ts_document_make() defer { ts_document_free(document) } return string.withCString { ts_document_set_language(document, ts_language_javascript()) ts_document_set_input_string(document, $0) ts_document_parse(document) let root = ts_document_root_node(document) return Cofree .ana { node in let count = ts_node_named_child_count(node) guard count > 0 else { return String.fromCString(ts_node_name(node, document)).map(Syntax.Leaf)! } return .Indexed((0..