-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80


TDD vs не TDD

Четверг, 03 Сентября 2020 г. 12:03 + в цитатник
korvin:
Цитата D_KEY @
Ну в твоем синтетическом примере может и не полез бы, а в реальном декларативном коде не вознкает потребности в рефакторинге?

Ну вот чуть менее синтетический:

    import Data.Function ((&))
    import Text.Printf
    data SaleSum = SaleSum {
    totalCost :: Double,
    totalQuantity :: Int
    }
    class SaleSummary s where
    summary :: s -> SaleSum
    instance Semigroup SaleSum where
    (SaleSum c1 q1) <> (SaleSum c2 q2) = SaleSum (c1 + c2) (q1 + q2)
    instance Monoid SaleSum where
    mempty = SaleSum 0.0 0
    instance Show SaleSum where
    show (SaleSum cost quantity) =
    "Total cost = " ++ printf "%.2f" cost ++ ", quantity = " ++ show quantity
    totalSummary :: SaleSummary s => [s] -> SaleSum
    totalSummary xs = xs & map summary & mconcat
    ----------------------------------------------------------------
    data Sale = Sale {
    itemID :: String,
    price :: Double,
    quantity :: Int
    -- maybe some other fields
    }
    instance SaleSummary Sale where
    summary s = SaleSum (price s * fromIntegral (quantity s)) (quantity s)
    testSales = [
    Sale "Foo" 0.20 4,
    Sale "Bar" 1.10 3
    ]
    main = print $ totalSummary testSales

https://ideone.com/xcshAS

Добавлено
Цитата applegame @
в мире ФП у меня остался и покрашенный и непокрашенный

Чушь. В мире ФП у тебя осталась история, что стул был непокрашенный, так же, как и в реальном.

https://forum.sources.ru/index.php?showtopic=419507&view=findpost&p=3838225

Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку