Haskell 关联映射或字典是函子吗? 我相信如果我们把地图中的值看作是在函数和键中考虑的值,作为我把这种语言从上下文中提取出来的一部分。 但我不确定这些考虑是否意味着它通常不是函子。

Haskell 关联映射或字典是函子吗? 我相信如果我们把地图中的值看作是在函数和键中考虑的值,作为我把这种语言从上下文中提取出来的一部分。 但我不确定这些考虑是否意味着它通常不是函子。,haskell,functional-programming,typeclass,Haskell,Functional Programming,Typeclass,是的,在名为的包中有这样一个例子。这是函子的一个实例 您还可以将贴图视为从键到值的函数 因为->k是一个函子,可能是一个函子,而函子的组合是函子,那么Map也是一个函子。是的,在名为。这是函子的一个实例 您还可以将贴图视为从键到值的函数 因为->k是一个函子,可能是一个函子,并且函子的组合是函子,所以Map也是一个函子。是的,字典应该由以下内容定义 data Dict k v = ... 然后我们的函子实例看起来像 instance ConstraintsOnKey k => Funct

是的,在名为的包中有这样一个例子。这是函子的一个实例

您还可以将贴图视为从键到值的函数


因为->k是一个函子,可能是一个函子,而函子的组合是函子,那么Map也是一个函子。

是的,在名为。这是函子的一个实例

您还可以将贴图视为从键到值的函数


因为->k是一个函子,可能是一个函子,并且函子的组合是函子,所以Map也是一个函子。

是的,字典应该由以下内容定义

data Dict k v = ...
然后我们的函子实例看起来像

instance ConstraintsOnKey k => Functor (Dict k) where
  ...
请注意,我们部分应用了Dict类型构造函数,以便对字典中的值进行fmap。特别是

fmap :: (a -> b) -> Dict k a -> Dict k b

所以fmap永远不能修改我们字典的结构,字典里有什么键。Haskell中最常见的映射就是这种情况。

是的,字典应该由以下内容定义

data Dict k v = ...
然后我们的函子实例看起来像

instance ConstraintsOnKey k => Functor (Dict k) where
  ...
请注意,我们部分应用了Dict类型构造函数,以便对字典中的值进行fmap。特别是

fmap :: (a -> b) -> Dict k a -> Dict k b

所以fmap永远不能修改我们字典的结构,字典里有什么键。Haskell中最常见的映射就是这种情况。

是的,只要键独立于值,就像普通映射/字典类型一样

但是,如果您有一个map/dictionary类型,该类型具有一个键依赖于mappedto值的不变量,那么这就不再正确了。例如,映射到的类型是一条记录,比如Person类型,而键是它的一部分,比如SocialSecurityCode类型。如果这种不变量是结构的一部分,那么它就不能是函子

通过检查函子定律,可以轻松验证函子实例是否有效:

fmap id == id
fmap (g . h) == (fmap g) . (fmap h)

是的,只要键独立于值,就像通用映射/字典类型一样

但是,如果您有一个map/dictionary类型,该类型具有一个键依赖于mappedto值的不变量,那么这就不再正确了。例如,映射到的类型是一条记录,比如Person类型,而键是它的一部分,比如SocialSecurityCode类型。如果这种不变量是结构的一部分,那么它就不能是函子

通过检查函子定律,可以轻松验证函子实例是否有效:

fmap id == id
fmap (g . h) == (fmap g) . (fmap h)

那么,fmap f Map g=Map fmap fmap f g?是的!fmap只依赖于内部fmap。所以,fmap f Map g=Map fmap fmap f g?是的!Fmapping仅仅依赖于内部fmap。在您的示例中,问题不在于字面上理解的形状,而在于-因为必须有一种方法从您的记录生成键,这是对这些记录的类型约束。函子必须能够携带任何类型的值。在您的示例中,问题不在于字面上理解的形状,而在于-因为必须有一种方法从您的记录生成键,这是对这些记录的类型约束。一个函子必须能够携带任何类型的值。当你把K作为结构的一部分时,是的-而且OP也这么说,如果我们把映射中的值看作是函数中的值和键作为上下文的一部分——但是他们的问题是,似乎是这样,当你把K作为结构的一部分时,是的,OP也这么说,如果我们把地图中的值看作是函数中的值和键作为上下文的一部分的话,那么他们的问题是,它看起来是一般的吗?