Implementations of fmap, reify, and and-then are all built around the lazy-call combinator. This combinator emulates the behavior of lazily evaluated languages like Haskell by currying input over a quotation until it's type signature matches ( -- x ) . As such, any input functions to these functions must eventually resolve to a single output.
USING: arrays math.quadratic monadics quotations prettyprint ;
! Unevaluated ( -- x x ) quotation will remain thunked.
[ quadratic ] 1 just <$> 0 just <*> -1 just <*> . T{ Just { value [ -1 0 1 3 nreverse quadratic ] } }
USING: arrays math.quadratic monadics quotations prettyprint ;
! Computes result into Maybe value as expected.
[ quadratic 2array ] 1 just <$> 0 just <*> -1 just <*> . T{ Just { value { 1.0 -1.0 } } }