функциа filter обязана проверить каждый элемент листа который ей передаётся, в то время как takeWhile берет элемент за элементом пока условие выполняется. Функция filter в любом случае никогда не завершит своего выполнения при работе с бесконечными потоками (ведь даже filter (>100) primes никогда не завершается, и понятно почему). Можно рассматривать primes как строго возрастающую функцию, и только благодаря этому свойству takeWhile (<10) primes «фильтрует» список правильно.
Злоупотребление синонимами типов type приводит к тому, что программирование на Цацкеле становится подобным программированию на каком-нибудь PHP. Используйте же алгебраические типы данных везде, где только можно.
Абсолютно с Вами согласен, что злоупотребление — это плохо, но с другой стороны, врятли бы кто понял что означает эта запись:
newtype Database = Db [([(String,String)],String)]
Я имею ввиду, что если есть составные типы данных (как Database), то хотя бы краткое описание типа должно присутствовать.
filter
обязана проверить каждый элемент листа который ей передаётся, в то время какtakeWhile
берет элемент за элементом пока условие выполняется. Функцияfilter
в любом случае никогда не завершит своего выполнения при работе с бесконечными потоками (ведь дажеfilter (>100) primes
никогда не завершается, и понятно почему). Можно рассматриватьprimes
как строго возрастающую функцию, и только благодаря этому свойствуtakeWhile (<10) primes
«фильтрует» список правильно.Абсолютно с Вами согласен, что злоупотребление — это плохо, но с другой стороны, врятли бы кто понял что означает эта запись:
Я имею ввиду, что если есть составные типы данных (как
Database
), то хотя бы краткое описание типа должно присутствовать.