% ---------------------------------------------------------------------------- % % spellcheck.m % Ralph Becket <rbeck@microsoft.com> % Tue Jan 9 16:43:59 GMT 2001 % vim: ts=4 sw=4 et tw=0 wm=0 ff=unix % % ---------------------------------------------------------------------------- % :- module mytest. :- interface. :- import_module io. :- pred main(io__state, io__state). :- mode main(di, uo) is det. :- implementation. :- import_module map, int, list, string, require, std_util, char. :- type dict == map(string, unit). main --> io__see("Usr.Dict.Words", Res), ( { Res = ok }, read_dictionary(map__init, Dict) ; { Res = error(ErrNo) }, { error(io__error_message(ErrNo)) } ), io__seen, find_errors(Dict). :- pred read_dictionary(dict, dict, io__state, io__state). :- mode read_dictionary(in, out, di, uo) is det. read_dictionary(D0, D) --> io__read_line_as_string(Result), ( { Result = ok(Line) }, { Words = string__words(char__is_whitespace, Line) }, { D1 = list__foldl(func(W, M) = M ^ elem(W) := unit, Words, D0) }, read_dictionary(D1, D) ; { Result = eof }, { D = D0 } ; { Result = error(ErrNo) }, { error(io__error_message(ErrNo)) } ). :- pred find_errors(dict, io__state, io__state). :- mode find_errors(in, di, uo) is det. find_errors(D) --> io__read_line_as_string(Result), ( { Result = ok(Line) }, { Words = string__words(char__is_whitespace, Line) }, list__foldl( ( pred(S::in, di, uo) is det --> ( if { map__contains(D, S) } then [] else io__write_string(S), io__nl ) ), Words ), find_errors(D) ; { Result = eof } ; { Result = error(ErrNo) }, { error(io__error_message(ErrNo)) } ).