Проектирование монадического типа
-
15-11-2019 - |
Вопрос
Мне понадобится помощь в разработке монадического типа данных. Кажется, мне трудно осознать эту идею, но я вполне точно знаю, чего хочу.Только средство проверки типов, кажется, требует некоторого убеждения в этом вопросе.
Мне нужен какой-то тип данных Primitive
это может быть монада.Его функции в основном представляют собой примитивы рисования, и я хочу иметь возможность комбинировать их, а также комбинации, являющиеся примитивами, во многом подобно Parser
набери в библиотеке parsec
.Но настоящий рисунок должен быть выполнен с помощью IO
монада.
Кстати, у меня тоже есть класс Drawable a
так:
class Drawable a where
draw :: (MonadIO m) => Pos -> a -> m ()
И я, конечно же, хочу, чтобы каждый примитив можно было рисовать.Я благодарен за любой вклад.
Решение
Я не понимаю, почему вы думаете, что это должна быть монада.Что в этом монадического?
Сначала вам следует спроектировать желаемый API и постепенно думать о том, как его абстрагировать.
Кстати, библиотека диаграмм Брента имеет очень хороший композиционный API, который может дать несколько хороших идей: http://byorgey.wordpress.com/2008/04/30/new-haskell-diagrams-library/