4
有什么办法可以将函数作为参数传递给两种不同的类型吗?作为一个人为的例子,我可以创造与表达(Just 3, Just True)
一个(Maybe Int, Maybe Bool)
,但如果我试图让这种行为更通用与功能应用函数作为参数传递给Haskell中的不同类型
generic :: (a -> Maybe a) -> (Maybe Int, Maybe Bool)
generic f = (f 3, f True)
,这样我也许能像做generic Just
,编译器会抱怨因为类型变量a
是不变的。
此用例将通用函数应用于每个节点通过类型进行参数化的树结构。
我不知道你对此有什么看法,但我*总是*打开'ScopedTypeVariables'当我使用一个扩展,使'forall';否则我很可能会在路上感到困惑。 – dfeuer
完美,非常感谢!你知道所有这些现代语言扩展的优秀资源吗?我所能找到的所有Haskell书籍大部分都与Haskell 98和Haskell文档相关,它们可能会让你非常疲惫...... – igorbark
@igorbark如果你想要所有的扩展,没有比[马的嘴巴]更好的源代码(https:// downloads.haskell.org/~ghc/latest/docs/html/users_guide/ghc-language-features.html)。 –