**Решение.** Разобъем решение на несколько шагов. 1. Введем свой предикат, показывающий, что a делится нацело на b, т.е. a:b (или тоже самое b|a): de a b = if ((rem a b) == 0) then True else False Здесь rem -- это функция, возвращающая остаток от деления. Если он равен нулю, то деление нацело есть. Будем применять данный предикат так: a `de` b. 2. Определим множество делителей числа n: divs_of n = [t | t <- [2..(n-1)], n `de` t] Список порожден значениями t из интервала от 2 до n-1, которые являются делителями числа n. 3. Теперь зададим предикат, указывающий, является ли аргумент простым числом (для этого проверяем список делителей на пустоту): isprime x = if null (divs_of x) then True else False 4. Все готово. Зададим требуемое множество: primeset = [n | n <- [2..], isprime n] Для проверки работоспособности кода его необходимо скопировать в файл с именем, скажем, prime.lhs, затем запустить интерпретатор ghci и в нем загрузить этот файл командой :l prime.lhs. После чего можно напечатать первые сто простых чисел командой take 100 primeset. Для интереса попробуйте задать divs_of 360, или проверить isprime (10^100000+1). (можно загрузить [[http://wiki.nsunc.com/_media/haskell/haskell/primesetutf.lhs|готовый файл]] и отправить его на исполнение командой ghci primesetUTF.lhs) **Задачи для самостоятельного размышления.** Написать оптимизированный код. Например, использовать элементы решета Эратосфена для просмотра делителей. Сделать код компактней. Или написать функцию, ищущию простое число больше данного натурального.