我需要一个函数,这是否: >>> func (+1) [1,2,3]
[[2,2,3],[2,3,3],[2,3,4]]
我的真实情况更为复杂,但这个例子显示了问题的要点。主要区别在于,实际上使用索引是不可行的。 List应该是Traversable或Foldable。 编辑:这应该是函数的签名: func :: Traversable t => (a -> a) -> t a -> [t
理解这Traversable的执行以下example from the NICTA course: instance Traversable List where
traverse ::
Applicative f =>
(a -> f b)
-> List a
-> f (List b)
traverse f =
f
首先,只是一些快速的上下文。我正在通过Haskell Programming From First Principles这本书,并且碰到了下面的练习。 尝试编写一个解析器,该解析器的功能不是string,而是使用char。 我找不出来,所以我检查了the source for the implementation。我目前正在试图将我的头围绕在它周围。这里是: class Parsing m =>
我在看的文档Data.Traversable和碰到fmapDefault - https://downloads.haskell.org/~ghc/latest/docs/html/libraries/base/Data-Traversable.html#g:3 fmapDefault :: Traversable t => (a -> b) -> t a -> t b
的文档状态 - 该功能
我想通过在Haskell中实现它来了解镜头。我已经实现了view组合子如下: {-# LANGUAGE RankNTypes #-}
import Control.Applicative
import Data.Traversable
type Lens s a = Functor f => (a -> f a) -> s -> f s
view :: Lens s a -> s -
如何为((->) a)编写Traversable实例? 我想我能做到这一点,如果我一般能解开一个适用函子: instance Traversable ((->) k) where
-- traverse :: (a -> f b) -> (k -> a) -> f (k -> b)
-- traverse h t = ?
-- h :: Applicativ