是否可以在 Haskell 中创建像 Scala 2.8 那样的集合 api?

发布于 2024-10-11 18:52:48 字数 294 浏览 3 评论 0原文

Scala 集合 api 有一些非常有趣的属性,我想知道如何在 Haskell 中实现它;或者如果有可能的话(或者总体来说是个好主意)。我是一个 haskell 新手,所以我想听听你的想法。

scala 映射定义如下所示:

def map[B, That](f: A => B)(implicit bf: CanBuildFrom[Repr, B, That]): That

该 API 的一个有趣功能是,如果映射字符串并且映射函数返回字符,则结果将是字符串类型(而不是字符列表)。

The Scala collections api has some pretty interesting properties and I'm wondering how one would implement it in Haskell; or if it's even possible (or a good idea in general). I'm a bit of a haskell newbie so I'd like to hear your thoughts.

The scala map definition looks like this:

def map[B, That](f: A => B)(implicit bf: CanBuildFrom[Repr, B, That]): That

An interesting feature of this API is that if you map over a string and your map function returns a character, the result will be of type string (and not a list of characters).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

长途伴 2024-10-18 18:52:48

我们有一些与 Scala API 大致一样通用的东西。它被称为可折叠

class Foldable t where
  fold :: Monoid m => t m -> m
  foldMap :: Monoid m => (a -> m) -> t a -> m
  foldr :: (a -> b -> b) -> b -> t a -> b
  foldl :: (a -> b -> a) -> a -> t b -> a
  foldr1 :: (a -> a -> a) -> t a -> a
  foldl1 :: (a -> a -> a) -> t a -> a

http://www .haskell.org/ghc/docs/6.12.2/html/libraries/base-4.2.0.1/Data-Foldable.html

We have something roughly as general as the Scala API. It's called Foldable.

class Foldable t where
  fold :: Monoid m => t m -> m
  foldMap :: Monoid m => (a -> m) -> t a -> m
  foldr :: (a -> b -> b) -> b -> t a -> b
  foldl :: (a -> b -> a) -> a -> t b -> a
  foldr1 :: (a -> a -> a) -> t a -> a
  foldl1 :: (a -> a -> a) -> t a -> a

http://www.haskell.org/ghc/docs/6.12.2/html/libraries/base-4.2.0.1/Data-Foldable.html

眼泪也成诗 2024-10-18 18:52:48

我想说 Scala 中的这个映射函数确实更接近 Haskell 中的这个函数:

fmap :: (Functor f) => (a -> b) -> f a -> f b

其中列表类型只是另一个 Functor。

I want to say this map function in Scala is really closer to this from Haskell:

fmap :: (Functor f) => (a -> b) -> f a -> f b

Where the list type is just another Functor.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文