2014-07-17 3 views
1

У меня есть функция, использующая Dot-operator. Теперь я хочу написать его без точки. Как я могу это сделать?Dot-operator in haskell

all p = and . map p 

Это право?

all p = and (map p) 

я получаю эти ошибки:

4.hs:8:13: 
    Couldn't match expected type `[Bool]' 
       with actual type `[a0] -> [b0]' 
    In the return type of a call of `map' 
    Probable cause: `map' is applied to too few arguments 
    In the first argument of `and', namely `(map p)' 
    In the expression: and (map p) 

ответ

14

Посмотрите на definition из (.):

f . g = \ x -> f (g x) 

Расширение это дает

and . (map p) = \x -> and ((map p) x) 

или

all p x = and (map p x) 
4

Удаление (.) требует добавления явно аргумент, что точка является «потоковая» через свои функции. Вы хотите что-то вроде

all p xs = and (map p xs) 
+1

"расширение Eta" –