Каков правильный способ использования монады «ap» в Haskell? Я хочу сделать что-то похожее на это:Haskell Quine: «ap» Monad
main = (putStr . ap (++) show) "main = (putStr . ap (++) show) "
но я получаю сообщение об ошибке «Не в области:« ap ».
Использование «import Control.Monad» ничего не делает. И я попытался дать ему
"ap :: Monad m => m (a -> b) -> m a -> m b"
тогда я получаю «тип подписи для` ар»не имеет сопроводительной связывания»
И, наоборот, если мы хотим избежать импорта, вместо импорта какого-либо модуля мы можем просто использовать '(\ fgx -> fx (gx))' (комбинатор S, который '(<*>)' и 'ap' являются тип его типовых версий). –
Большое спасибо! – GossJ
@sacundim: Кто бы пересмотрел стандартную библиотечную функцию только для «избежания импорта»? Я имею в виду, что вам понадобится импорт в любом случае для любых нетривиальных программ –