Ох уж эти ваши хаскели. Захотел простую опцию в командную строку запилить. Гуглом нашёл имеющийся из коробки System.Console.GetOpt
. Читаю (и пытаюсь адаптировать) второй пример внизу:
...
(o,n,[] ) -> return (foldl (flip id) defaultOptions o, n)
...
Что за flip id
?
λ> :type flip
flip :: (a -> b -> c) -> b -> a -> c
λ> :type id
id :: a -> a
λ> :type (flip id)
(flip id) :: b -> (b -> c) -> c
Поломал 10 минут голову пока примерно не понял что происходит. Ну, ок, идём дальше:
(OptArg ((\ f opts -> opts { optOutput = Just f }) . fromMaybe "output")
Что за fromMaybe "output"
? То мы сверху defaultOptions делаем, то мы снова делаем что-то подобное им, только ещё и неясно зачем "output". Убрал fromMaybe
-часть, поборолся с компилятором и понял, что эта "магия" именно потому, что там у нас уже точно будет Just значение, но мы всё равно получим Maybe foo. Короче чисто чтоб компилятор успокоить.
В общем, люблю хаскель, с пользой поупражнялся в типах.
на самом деле опенсорсно http://watcher.com.ua/2014/05/23/hakery-povnistyu-zlamaly-vyborchu-systemu-tsvk/
Хакери повністю зламали виборчу систему ЦВК (оновлено)
Один з ЖЖ-блогерів, ntv.livejournal.com, провів бліц-аналіз зламаних даних і був шокований безвідповідальністю та халатністю ІТ-спеціалістів ЦВК. За його словами, root-паролі до адміністративних опцій зберігалися у звичайному txt-файлі на робочих столах комп’ютерів, а сама інформація була вкрай неструктуризована та розвалена.
Завтрак типичного программиста http://www.randalolson.com/wp-content/uploads/healthcare-gov-code-count.png
Спам для аутистов http://i.imgur.com/SUXsF0Z.png