Jaki jest właściwy sposób użycia monady "ap" w Haskell? Chcę zrobić coś podobnego do tego:Haskell Quine: "ap" Monad
main = (putStr . ap (++) show) "main = (putStr . ap (++) show) "
, ale pojawia się błąd "Nie w zakresie:" ap "."
Użycie "import Control.Monad" nic nie robi. i próbowałem nadając mu
"ap :: Monad m => m (a -> b) -> m a -> m b"
potem dostać „Podpis dla typu` ap”brakuje towarzyszący wiązanie”
Alternatywnie, jeśli chcemy uniknąć importu, zamiast importować którykolwiek z modułów możemy po prostu użyć '(\ fgx -> fx (gx))' (kombinator S, który '(<*>)' i 'ap' są wpisz ich wersje generyczne-klasyczne). –
Dziękuję bardzo! – GossJ
@sakundim: Kto przedefiniowałby standardową funkcję biblioteki tylko po to, by "uniknąć importu"? Chodzi mi o to, że i tak będziesz potrzebował importów do nietrywialnych programów. –