История изменений
Исправление
sf,
(текущая версия)
:
Что значат в конфиге $ и <+>? (Например строка 100 и 404.)
Все загогулины со «спесцимволами» '!#$%&*+./<=>?@\^|-~' - это инфиксные операторы (то, что пишется между операндами, как 'a + b').
-- - однострочный комментарий
Про '$':
'$' - оператор для тех, кому лень ставить скобки.
Обычный синтаксис передачи аргумента/тов в функцию выглядит как:
print (cos (sin (0.1 + 0.001)))
print $cos $sin $0.1 + 0.001
Или для реального примера:
myFloaU = named ("Unique " ++ myFloaName) $ mouseResize $ noFrillsDeco shrinkText myTitleTheme simplestFloat
myFloaU = named ("Unique " ++ myFloaName) ( mouseResize ( noFrillsDeco shrinkText myTitleTheme simplestFloat ) )
'$' можно воспринимать как «перевернутый оператор 'точка'» в C++/C#/Ruby/Python, etc.
new_o = f1 a1 $ f2 a21 a22 $ f3 $ o
new_o = o.f3().f2(a21, a22).f1(a1)
В данном случае берется дефолтный 'simplestFloat' (это «структура из нескольких» полей из XMonad.Layout.LayoutModifier.ModifiedLayout) и немного корректируется.
Из-за того, что вся программа - это пара-тройка таких выражений, '$' - один из самых популярных операторов.
В стандартной библиотеке он определен так:
f $ x = f x
infixr 0 $ -- правоассоциативный, с самым низким приоритетом
Если нравится «черезточечный стиль» - можно определить свой оператор
x & f = f x
-- или подождать ghc-7.10: http://git.haskell.org/ghc.git/commitdiff/1bf6c0e482cfe4b9dfa0b5ed18a5741ba44fc226
Про '<+>':
Смысл этого оператора «объединять две объединяемые сущности» (формально, это бинарная операция над множеством monoid).
Определяется аж вот так:
(<+>) = mappend -- для тех, кому лень писать 'mappend a $ mappend b $ mappend c': a <+> b <+> c
В отличие от '$':
- имеет 2, а не 1 аргумент
- имеет разный смысл для разных типов объектов
Проспые примеры: - строки:
"hello" <+> " " <+> "world" -- результат - "hello world"
getSum (Sum 4 <+> Sum 8) -- результат 12
getProduct (Product 4 <+> Product 8) -- результат 32
myTopLeftLogHook topLeftBar <+> myTopRightLogHook topRightBar <+> ...
xmonad_action1 <+> xmonad_action2 <+> ...
Это просто последовательное выполнение действий (коллбеков) 'xmonad_action1', 'xmonad_action2'. Весь код от функции 'main' (начало программы):
xmonad $ ... $ defaultConfig { ..., logHook = наша-портянка, .. }
Тут берется дефолтный конфиг 'defaultConfig' и в нем замещается дефолтный коллбек (поле в структуре с именем logHook) на наш.
Он каждое событие от xmonad отправляетаж в 4 дочерних dzen обработчика (а они уже решают, рисовать что-то юзеру или нет).
Исходная версия
sf,
:
Что значат в конфиге $ и <+>? (Например строка 100 и 404.)
Все загогулины со «спесцимволами» '!#$%&*+./<=>?@\^|-~' - это инфиксные операторы (то, что пишется между операндами, как 'a + b').
-- - однострочный комментарий
Про '$':
'$' - оператор для тех, кому лень ставить скобки.
Обычный синтаксис передачи аргумента/тов в функцию выглядит как:
print (cos (sin (0.1 + 0.001)))
print $cos $sin $0.1 + 0.001
Или для реального примера:
myFloaU = named ("Unique " ++ myFloaName) $ mouseResize $ noFrillsDeco shrinkText myTitleTheme simplestFloat
myFloaU = named ("Unique " ++ myFloaName) ( mouseResize ( noFrillsDeco shrinkText myTitleTheme simplestFloat ) )
'$' можно воспринимать как «перевернутый оператор 'точка'» в C++/C#/Ruby/Python, etc.
new_o = f1 a1 $ f2 a21 a22 $ f3 $ o
new_o = o.f3().f2(a21, a22).f1(a1)
В данном случае берется дефолтный 'simplestFloat' (это «структура из нескольких» полей из XMonad.Layout.LayoutModifier.ModifiedLayout) и немного корректируется.
Из-за того, что вся программа - это пара-тройка таких выражений, '$' - один из самых популярных операторов.
В стандартной библиотеке он определен так:
f $ x = f x
infixr 0 $ -- правоассоциативный, с самым низким приоритетом
Если нравится «черезточечный стиль» - можно определить свой оператор
x & f = f x
-- или подождать ghc-7.10: http://git.haskell.org/ghc.git/commitdiff/1bf6c0e482cfe4b9dfa0b5ed18a5741ba44fc226
Про '<+>':
Смысл этого оператора «объединять две объединяемые сущности» (формально, это бинарная операция над множеством monoid).
Определяется аж вот так:
(<+>) = mappend -- для тех, кому лень писать 'mappend a $ mappend b $ mappend c': a <+> b <+> c
В отличие от '$': - имеет 2, а не 1 аргумент - имеет разный смысл для разных типов объектов
Проспые примеры: - строки:
"hello" <+> " " <+> "world" -- результат - "hello world"
getSum (Sum 4 <+> Sum 8) -- результат 12
getProduct (Product 4 <+> Product 8) -- результат 32
myTopLeftLogHook topLeftBar <+> myTopRightLogHook topRightBar <+> ...
xmonad_action1 <+> xmonad_action2 <+> ...
Это просто последовательное выполнение действий (коллбеков) 'xmonad_action1', 'xmonad_action2'. Весь код от функции 'main' (начало программы):
xmonad $ ... $ defaultConfig { ..., logHook = наша-портянка, .. }
Тут берется дефолтный конфиг 'defaultConfig' и в нем замещается дефолтный коллбек (поле в структуре с именем logHook) на наш.
Он каждое событие от xmonad отправляетаж в 4 дочерних dzen обработчика (а они уже решают, рисовать что-то юзеру или нет).