Это общий вопрос, не связанный с какой-либо частью кода.
Скажем, у вас есть тип T a
, которому может быть предоставлен экземпляр Monad
. Поскольку каждая монада является Applicative
, назначая pure = return
и (<*>) = ap
, а затем каждое приложение является Functor
через fmap f x = pure f <*> x
, лучше ли сначала определить ваш экземпляр Monad
, а затем тривиально дать T
экземпляры Applicative
и Functor
?
Мне кажется немного отсталым. Если бы я занимался математикой вместо программирования, я бы подумал, что сначала я покажу, что мой объект является функтором, а затем продолжайте добавлять ограничения, пока я не покажу, что это монада. Я знаю, что Haskell просто вдохновлен Теорией категорий и, очевидно, методы, которые можно использовать при построении доказательства, - это не те методы, которые можно было бы использовать при написании полезной программы, но я хотел бы получить мнение сообщества Haskell. Лучше ли идти от Monad
до Functor
? или от Functor
до Monad
?