最近有一个关于Sets的讨论,Scala支持zip方法,以及如何导致bug,例如 scala> val words = Set("one", "two", "three") scala> words zip (words map (_.length)) res1: Set[(java.lang.String, Int)] = Set((one,3), (two,5)) 我想这很清楚Set s不应该支持zip操作,因为这些元素没有sorting。 然而,有人提出问题是Set不是一个真正的函子,也不应该有一个map方法。 当然,你可以通过映射到一个集合,让自己陷入麻烦。 现在切换到Haskell, data AlwaysEqual a = Wrap { unWrap :: a } instance Eq (AlwaysEqual a) where _ == _ = True instance Ord (AlwaysEqual a) where compare _ _ = EQ […]
map :: (a -> b) -> [a] -> [b] fmap :: Functor f => (a -> b) -> fa -> fb liftM :: Monad m => (a -> b) -> ma -> mb 为什么我们有三个不同的function基本上是一样的?