На основе этой статьи . Я играл с переводом функций из понимания списка в комбинаторный стиль. Я нашел кое-что интересное.
-- Example 1: List Comprehension
*Main> [x|(x:_)<-["hi","hello",""]]
"hh"
-- Example 2: Combinatory
*Main> map head ["hi","hello",""]
"hh*** Exception: Prelude.head: empty list
-- Example 3: List Comprehension (translated from Example 2)
*Main> [head xs|xs<-["hi","hello",""]]
"hh*** Exception: Prelude.head: empty list
Кажется странным, что пример 1 не генерирует исключение, потому что шаблон (x: _)
соответствует одному из определений head
. Есть ли подразумеваемый фильтр (не null)
при использовании списков?