Haskell: от понимания списка к комбинаторному

На основе этой статьи . Я играл с переводом функций из понимания списка в комбинаторный стиль. Я нашел кое-что интересное.

-- 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) при использовании списков?

8
задан 10 August 2011 в 07:24
поделиться