作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
阅读真实世界 Haskell 和 Typeclassopedia我的印象是 2 元组 (a,b)
在 Haskell 中可以有非常特殊的角色。
我遇到的第一个用途是 lookup
我们使用 2 元组列表作为字典。
然后我也发现((,) e)
是一个仿函数的实例(但没有其他 n 元组),例如在上述 (key,value)
的例子中是有意义的.
现在最新的案例——这是我真正想询问的案例——在 Typeclassopedia 的第 4.3 章中。那里说((,) a)
是 Applicative
的一个实例如果 a
是幺半群。你什么时候真正使用它?您使用 Applicative
的应用程序是什么? (a,b)
的实例?
最佳答案
没有什么可以阻止我们为三元组或任意 n 元组编写实例:
instance Functor ((,,) a b) where
fmap f (x,y,z) = (x,y,f z)
instance (Monoid a, Monoid b) => Applicative ((,,) a b) where
pure z = (mempty, mempty, z)
(a,b,f) <*> (x,y,z) = (a `mappend` x, b `mappend` y, f z)
Monoid
实例最多定义为 5 元组。当然可以为 10 元组编写它们,但此时我们只是复制样板代码。
dictionary :: [(String, String)]
dictionary =
[("cat", "animal that likes strings; not Strings, though")
,("dog", "animal that likes you; yes you")
,("foo", "a strange word used by programmers in examples")
]
partialDictionaryEntry :: String -> String
"cat"
,
"dog"
和
"foo"
, 或者
dictionaryEntry :: String -> Maybe String
\s -> lookup s dictionary
将是。使用对,您可以对任何其他 n 元组进行建模:
(a,b,z) = ((a,b),z)
(a,b,c,z) = ((a,b,c),z) = (((a,b),c),z)
Applicative ((,,) a b)
例如,因为它已经提供给
(,) (a,b)
由于
Monoid
实例。
Applicative
实例?这是最简单的
Writer
执行:
log :: (Show a) => a -> (String, a)
log x = (show x ++ "\n", x)
fivePlusThree = (+) <$> log 3 <*> log 5
main = do
let (logs, result) = fivePlusThree
putStrLn logs
print result
3
5
8
Writer
和它的
writer
方法,因为它们使用起来更愉快,并提供了严格的变体。
关于haskell - 二元组的特殊地位是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44780065/
Subversion 手册指出: '!' Item is missing (e.g. you moved ordeleted it without using svn). Thisalso indic
我是一名优秀的程序员,十分优秀!