21

Re: Haskell

Ну добре. Візьмемо монаду Maybe. Я її сприймаю як тип з двома конструкторами і відповідно використовую - патерн-матчінг і т. д. Що ще можна з нею робити? Скільки не читав пояснень, далі такого розуміння не просунувся.

22

Re: Haskell

quez написав:

Ну добре. Візьмемо монаду Maybe. Я її сприймаю як тип з двома конструкторами і відповідно використовую - патерн-матчінг і т. д. Що ще можна з нею робити? Скільки не читав пояснень, далі такого розуміння не просунувся.

Ну, якщо вас цікавить саме використання її як монади — то її так і використовують. Наприклад, у вас є функція "getParam :: Text -> Request -> Maybe Text", вона повертає GET-параметр запросу, якщо він присутній. Вам треба робити щось корисне лише у разі, коли всі три параметри присутні — то ж ви можете замість

  case getParam "a" req of
    Just a -> do
      case getParam "b" req of
        Just b -> do
          case getParam "c" req of
            Just c -> do ...
            Nothing -> handleError
        Nothing -> handleError
    Nothing -> handleError

ось так зробити

  -- ...
  let abc = do
    a <- getParam "a" req
    b <- getParam "b" req
    c <- getParam "c" req
    return (a,b,c)
  case abc of
    Just (a,b,c) -> ...
    Nothing -> handleError

або ж, використовуючи Applicative-інстанс і TupleSections одразу:

  abc <- (,,) <$> getParam "a" req <*> getParam "b" req <*> getParam "c" req
Подякували: quez1

23

Re: Haskell

quez написав:

Ну добре. Візьмемо монаду Maybe. Я її сприймаю як тип з двома конструкторами і відповідно використовую - патерн-матчінг і т. д. Що ще можна з нею робити? Скільки не читав пояснень, далі такого розуміння не просунувся.

Але ви повинні розділяти Maybe як звичайний собі тип, і той факт, що його ще й зробили монадою. Могли не робити, для цього просто не реалізовувати "instance Monad Maybe", і все було б чудово, всі були б щасливі, жили б без монадного використання. Тому, можливо вас саме це збило з пантелику?

Подякували: quez1

24

Re: Haskell

p.s.: знов вибачте, чомусь листи приходять лише коли до мене надходить пряма відповідь. Не знайшов налаштування, щоб підписатися на всю тему.

25

Re: Haskell

k-bx, дозвольте поцікавитись, що ви писали чи пишете на Хаскелі?

26

Re: Haskell

quez написав:

k-bx, дозвольте поцікавитись, що ви писали чи пишете на Хаскелі?

Не проблема. Працюю в компанії ThoughtLeadr http://www.thoughtleadr.com/ , наш продукт інтегрують різні веб-сайті для того, щоб показувати рекламу. Друга частина продукту — аналітика щодо реклами, що показувалася. Обидва продукти повністю написані на Хаскелі.

Подякували: 0xDADA11C71

27

Re: Haskell

Це, мабуть, вперше бачу комерційне використання Хаскеля. Воно справді виходить так, як в теорії: набагато менше тестів, менше часу на написання? Продуктивність не страждає?

28

Re: Haskell

quez написав:

Це, мабуть, вперше бачу комерційне використання Хаскеля. Воно справді виходить так, як в теорії: набагато менше тестів, менше часу на написання? Продуктивність не страждає?

Ну, як мінімум в Києві є ще один проект, пов’язаний з трейдингом на Хаскелі (здається в EPAM), в Одесі є Рома Чепляка, що пише на хаскелі для SignalVine http://www.signalvine.com/ . Тож я точно не перший :)

Так, вражень багато. В цілому скажу, що продуктивність — як повсюди, спочатку повільно, з часом все швидше й швидше. Але завдяки типам та іншим фішкам — маю більше можливостей для подальшого прискорення, і зараз вже, коли щось пишу на пітоні, мені типів дуже не вистачає, відчуваю, що без них набагато гірше і складніше.

Менше тестів, менше часу на написання, легше розбиратися в чужому коді, а головне — відсутність росту складності роботи з проектом по мірі його розростання. Ну і відсутність страху приймати пул-реквести, не треба боятися, що неправильний символ все поламає.

Короче, воно того варте :) Звичайно, є моменти, яких не вистачає з динамічного світу, тому, наприклад, функціональні тести маємо на пітоні, хоча чим далі тип більше планую їх звідти забрати. Ще б більше часу на "хакерство".

Сподіваюсь на наступному kyivfprog щось розказати, тож приходьте будь-ласка.

Подякували: quez, 0xDADA11C7, Torbins3