?

Log in

No account? Create an account
acme-kohirnt - Дважды мудак [entries|archive|friends|userinfo]
Декларативное рулит

Site Meter

[ website | Мой сайт ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

acme-kohirnt [окт. 7, 2017|00:16 am]
Andy Melnikov
[Tags|, , ]

Колонка аппликатива в таблице оказывается лишней: единственная операция *> эквивалентна >>. То есть, можно (в альтернативной прелюде) всё переименовать: (Monad.>>) выкинуть, а *> переименовать для единообразия в >>.

Тогда получаем единообразную матрицу 3х3 (две матрицы, если считать флипнутую версию с <=| и т.п.):

module Acme.Kohirnt(
-- |..    >..    $..
  (|=>), (>=>), ($=>), -- .=>
  (|>=), (>>=), ($>=), -- .>=
  (|>),  (>>),  ($>),  -- .>
) where

import Prelude hiding ((>>))
import Control.Monad ((>=>))
import Data.Functor (($>))
import Control.Category ((>>>))
import Data.Function ((&))

(|>) :: a -> b -> b
(|>) = flip const

(|=>) :: (a -> b) -> (b -> c) -> a -> c
(|=>) = (>>>)

(|>=) :: a -> (a -> b) -> b
(|>=) = (&)

($>=) :: Functor f => (a -> b) -> f a -> f b
($>=) = (<$>)

($=>) :: Functor f => (a -> b) -> (b -> c) -> f a -> f c
g $=> f =  ($>=) (g $=> f)   -- fmap (g >>> f)

(>>) :: Applicative f => f a -> f b -> f b
(>>) = (*>)
СсылкаОтветить