gpt4 book ai didi

haskell - 向类型类定义添加附加函数/组合器有哪些优点和缺点?

转载 作者:行者123 更新时间:2023-12-02 09:33:07 24 4
gpt4 key购买 nike

查看source for Monad :

class  Monad m  where
(>>=) :: forall a b. m a -> (a -> m b) -> m b
(>>) :: forall a b. m a -> m b -> m b

return :: a -> m a
fail :: String -> m a

{-# INLINE (>>) #-}
m >> k = m >>= \_ -> k -- <-- !! right here !!
fail s = error s

您可以看到>>有一个默认实现。我的问题是,在类型类中包含函数/组合器,而不是在类型类之外单独提供它,这被认为是好还是坏实践?为什么?<小时/>

也就是说,为什么不:

class  Monad m  where
(>>=) :: forall a b. m a -> (a -> m b) -> m b

return :: a -> m a
fail :: String -> m a

fail s = error s

以及其他地方:

(>>)        :: forall a b. m a -> m b -> m b
{-# INLINE (>>) #-}
m >> k = m >>= \_ -> k

最佳答案

据我所知,包含“额外”功能有两个主要原因:

  • 效率:有时存在效率低下的通用实现,并且类的作者期望特定于实例的实现明显更好。在这种情况下,将函数包含在具有默认实现的类中意味着实例可以根据需要使用优化版本,但不是必需的。有关这方面的有趣示例,请查看 FoldableMonad 也是如此。

  • 实现的选择:通常可以使用类函数的多个子集;包括所有潜在的函数并相互使用默认实现意味着实例可以选择一些函数来实现并自动获取其余函数。这也适用于 Foldable,但 Eq 是一个更简单的示例。

关于haskell - 向类型类定义添加附加函数/组合器有哪些优点和缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12515655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com