(* v0 파이프라인의 자리표시자. parse -> name resolution -> type check -> effect/capability check -> interface artifact + hash -> (cool run 시) 얇은 typed IR -> interpreter 각 단계는 별도 모듈로 분리해 들어온다. 지금은 CLI 형태만 고정한다. *) type error = { file : string; message : string } let string_of_error { file; message } = Printf.sprintf "%s: %s" file message let check (files : string list) : (unit, error list) result = match files with | [] -> Error [ { file = ""; message = "검사할 파일이 없습니다" } ] | file :: _ -> Error [ { file; message = "check 파이프라인이 아직 구현되지 않았습니다" } ] let run (file : string) : (unit, error list) result = Error [ { file; message = "interpreter가 아직 구현되지 않았습니다" } ]