Свернуть сворачиваемое в альтернативу
Jul. 27th, 2016 02:01 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
В стандартной библиотеке (Data.Foldable) имеется функция
> :t asum asum :: (Alternative f, Foldable t) => t (f a) -> f a > asum [Nothing, Just 1, Just 2] Just 1 > asum [[1,2,3],[4,5]] [1,2,3,4,5]Можете ли вы написать afold с естественной для своего типа семантикой:
> :t afold afold :: (Alternative f, Foldable t) => t a -> f a > afold "abc" :: Maybe Char Just 'a' > afold "abc" :: [Char] "abc"Я знаю три решения: кривое (требующее FlexibleInstances и IncoherentInstances), обычное (утилизирующее избыточно богатый интерфейс Foldable) и современное, элегантно выпрямляющее кривизну кривого.
no subject
Date: 2016-07-29 03:36 pm (UTC)no subject
Date: 2016-07-29 08:31 pm (UTC)no subject
Date: 2016-07-29 09:13 pm (UTC)no subject
Date: 2016-07-30 10:36 am (UTC)1.1 Определение аппликативного функтора
1.2 Представители класса типов Applicative
1.3 Аппликативные парсеры (возможно 2 урока?)
1.4 Композиция на уровне типов
2. Управление эффектами
2.1 Класс типов Foldable
2.2 Класс типов Traversable
2.3 Связь классов Monad и Applicative
2.4 Классы типов Alternative и MonadPlus
2.5 Монада Except
2.6 Монада Cont ??
3. Трансформеры монад
4. Линзы
5. Что-то еще
Первые два модуля готовы в смысле видео, но задачки пока не вставляли.
no subject
Date: 2016-09-22 07:31 pm (UTC)asum . map pure . toList
— это какое из них?no subject
Date: 2016-09-25 04:07 am (UTC)