我需要一個函數,這是否: >>> 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