Minoru 10.01.2011 23:15 netbook

Псто, хочу поплакаться тебе на тему ввода-вывода в 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 рискует превратиться в нагромождение какого-то малопонятного (пока) кода с использованием (о ужас!) монад.

Я не буду даже спрашивать, что делать.

1. Minoru 10.01.2011 23:16 netbook

s/до седьмой/до седьмой главы «Real World Haskell»/

2. jtootf 10.01.2011 23:43 galois

а в C — код с использованием (о ужас!) функции fscanf, которая в данном конкретном случае заметно сложней всех необходимых знаний о монадах. also, результирующий код на Haskell — одна строка. рекомендую последовательно разбираться с языком, не задумываясь о пока малопонятных конструкциях

3. Minorujtootf /2 10.01.2011 23:46 netbook

То есть ты предлагаешь мне сначала дочитать книгу, а потом уже садиться что-то писать? :(

4. jtootfMinoru /3 10.01.2011 23:55 galois

я предлагаю не паниковать. не хочешь разбираться с IO — не лезь в IO; хочешь — потрать пару вечеров и перестань писать чушь о "нагромождении непонятного кода". IO в Haskell заметно проще, чем в C

Do you really want to delete ?