Псто, хочу поплакаться тебе на тему ввода-вывода в Haskell. Понимаешь, IO — это impure code, соответственно, знакомство с ним откладывается на потом, аж до седьмой. Впрочем, даже не смотря на то, что потом там идёт ещё две главы примеров, я сейчас не в состоянии распарсить вот такой вот файлик:
N
str1 m1 ←
str2 \ |
str3 | — m1 строк |
str4 / |
str2 m2 ←| N блоков
str5 \ |
str6 | — m2 |
str7 | — строк .
str8 / .
... .
То, что я без особых усилий реализовал бы в, скажем, Си, двумя вложенными циклами:
int N, m, i;
fscanf(file, "%i", &N);
for(int i = 0; i < N; i++) {
fscanf(file, "%s %i", str1, &m);
for(j = 0; j < m; j++)
fscanf(...);
}
(чтобы не усложнять пример, выбросил параметры последнего fscanf — не пофигу ли, куда читать?)
в Haskell рискует превратиться в нагромождение какого-то малопонятного (пока) кода с использованием (о ужас!) монад.
Я не буду даже спрашивать, что делать.
Minoru
10.01.2011 23:15 netbook
Do you really want to delete ?
s/до седьмой/до седьмой главы «Real World Haskell»/
а в C — код с использованием (о ужас!) функции fscanf, которая в данном конкретном случае заметно сложней всех необходимых знаний о монадах. also, результирующий код на Haskell — одна строка. рекомендую последовательно разбираться с языком, не задумываясь о пока малопонятных конструкциях
То есть ты предлагаешь мне сначала дочитать книгу, а потом уже садиться что-то писать? :(
я предлагаю не паниковать. не хочешь разбираться с IO — не лезь в IO; хочешь — потрать пару вечеров и перестань писать чушь о "нагромождении непонятного кода". IO в Haskell заметно проще, чем в C