Haskell 函数和Kleisli箭头的应用

Haskell 函数和Kleisli箭头的应用,haskell,typeclass,kleisli,Haskell,Typeclass,Kleisli,()和(MA->MB 有一个类型类可以抽象这些应用程序函数吗?正如Daniel的评论所说,(=*(结果是Category),在($)和(=两个示例都是函子的箭头映射)(不是函子,而是更广泛范畴意义上的函子),就像fmap是函子(=))的箭头映射,因此它只是标识的fmap,而没有标识包装(参见丹尼尔·瓦格纳对该问题的评论).通过适当的扩展和导入,($)::对于所有a b.(a->b)->a->b;($)=强制((= (.) :: (b -> c) ->

()
(MA->MB

有一个类型类可以抽象这些应用程序函数吗?

正如Daniel的评论所说,
(=*
(结果是
Category
),在
($)
(=两个示例都是函子的箭头映射)(不是
函子
,而是更广泛范畴意义上的函子),就像
fmap
函子
(=)
)的箭头映射,因此它只是
标识
fmap
,而没有
标识
包装(参见丹尼尔·瓦格纳对该问题的评论).

通过适当的扩展和导入,
($)::对于所有a b.(a->b)->a->b;($)=强制((=
(.)   ::            (b ->   c) -> (a ->   b) -> (a ->   c)
(<=<) :: Monad m => (b -> m c) -> (a -> m b) -> (a -> m c)
(<<<) :: (Category f) => f b c -> f a b -> f a c
($)   ::            (a ->   b) ->   a ->   b
(=<<) :: Monad m => (a -> m b) -> m a -> m b
f $ x
Identity . f =<< Identity x
class (Category r, Category t) => Functor f r t | f r -> t, f t -> r where
  fmap :: r a b -> t (f a) (f b)
-- `(.)` is plain old Prelude `(.)`, and not the generalised `Category` one.
instance Monad m => Functor m (Kleisli m) (->) where
    fmap = (=<<) . runKleisli
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}

import Control.Arrow (Kleisli(..))
import qualified Control.Categorical.Functor as F

newtype BindF m a = BindF { runBindF :: m a }
    deriving (Functor, Applicative, Monad, Show)

instance Monad m => F.Functor (BindF m) (Kleisli (BindF m)) (->) where
    fmap = (=<<) . runKleisli
GHCi> F.fmap (Kleisli (BindF . replicate 2)) (BindF [1,2,3])
BindF {runBindF = [1,1,2,2,3,3]}