X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=blobdiff_plain;f=extra%2Fmonads%2Fmonads.factor;h=851e1ff0445cabb5e6eedee898750584ab3b5c4d;hp=73e2b98eb282c404d2c63ab4bbd1b5928eda0e09;hb=HEAD;hpb=37dea89f2d3144edd426d93e37455e8dbdd7178d diff --git a/extra/monads/monads.factor b/extra/monads/monads.factor index 73e2b98eb2..b42d5c6fed 100644 --- a/extra/monads/monads.factor +++ b/extra/monads/monads.factor @@ -1,14 +1,12 @@ ! Copyright (C) 2008 Slava Pestov -! See http://factorcode.org/license.txt for BSD license. -USING: arrays kernel sequences sequences.deep splitting -accessors fry locals combinators namespaces lists lists.lazy -shuffle ; +! See https://factorcode.org/license.txt for BSD license. +USING: accessors arrays kernel lists lists.lazy sequences ; IN: monads ! Functors -GENERIC# fmap 1 ( functor quot -- functor' ) -GENERIC# <$ 1 ( functor quot -- functor' ) -GENERIC# $> 1 ( functor quot -- functor' ) +GENERIC#: fmap 1 ( functor quot -- functor' ) +GENERIC#: <$ 1 ( functor quot -- functor' ) +GENERIC#: $> 1 ( functor quot -- functor' ) ! Monads @@ -127,7 +125,7 @@ M: list-monad fail 2drop nil ; M: list monad-of drop list-monad ; -M: list >>= '[ _ swap lazy-map lconcat ] ; +M: list >>= '[ _ swap lmap-lazy lconcat ] ; ! State SINGLETON: state-monad @@ -188,7 +186,7 @@ M: writer-monad fail "Fail" throw ; : run-writer ( writer -- value log ) [ value>> ] [ log>> ] bi ; -M: writer >>= '[ [ _ run-writer ] dip '[ @ run-writer ] dip append ] ; +M: writer >>= '[ [ _ run-writer ] dip '[ @ run-writer ] dip prepend ] ; : pass ( writer -- writer' ) run-writer [ first2 ] dip swap call( x -- y ) ; : listen ( writer -- writer' ) run-writer [ 2array ] keep ;