363 (name, Pretty.chunks2 [ |
363 (name, Pretty.chunks2 [ |
364 str ("module " ^ name ^ " where {"), |
364 str ("module " ^ name ^ " where {"), |
365 content, |
365 content, |
366 str "}" |
366 str "}" |
367 ]); |
367 ]); |
368 fun serialize_module1 (module_name', (deps, (stmts, _))) = |
368 fun serialize_module (module_name', (deps, (stmts, _))) = |
369 let |
369 let |
370 val stmt_names = map fst stmts; |
370 val stmt_names = map fst stmts; |
371 val qualified = null presentation_names; |
371 val qualified = true; |
372 val imports = subtract (op =) stmt_names deps |
372 val imports = subtract (op =) stmt_names deps |
373 |> distinct (op =) |
373 |> distinct (op =) |
374 |> map_filter (try deresolver) |
374 |> map_filter (try deresolver) |
375 |> map Long_Name.qualifier |
375 |> map Long_Name.qualifier |
376 |> distinct (op =); |
376 |> distinct (op =); |
383 @ map_filter |
383 @ map_filter |
384 (fn (name, (_, SOME stmt)) => SOME (markup_stmt name (print_stmt qualified (name, stmt))) |
384 (fn (name, (_, SOME stmt)) => SOME (markup_stmt name (print_stmt qualified (name, stmt))) |
385 | (_, (_, NONE)) => NONE) stmts |
385 | (_, (_, NONE)) => NONE) stmts |
386 ); |
386 ); |
387 in print_module module_name' content end; |
387 in print_module module_name' content end; |
388 fun serialize_module2 (_, (_, (stmts, _))) = Pretty.chunks2 (map_filter |
|
389 (fn (name, (_, SOME stmt)) => if null presentation_names |
|
390 orelse member (op =) presentation_names name |
|
391 then SOME (print_stmt false (name, stmt)) |
|
392 else NONE |
|
393 | (_, (_, NONE)) => NONE) stmts); |
|
394 val serialize_module = |
|
395 if null presentation_names then serialize_module1 else pair "" o serialize_module2; |
|
396 fun write_module width (SOME destination) (modlname, content) = |
388 fun write_module width (SOME destination) (modlname, content) = |
397 let |
389 let |
398 val _ = File.check destination; |
390 val _ = File.check destination; |
399 val filename = case modlname |
391 val filename = case modlname |
400 of "" => Path.explode "Main.hs" |
392 of "" => Path.explode "Main.hs" |