306得票5回答
在Scala中,什么是高级类型(higher kinded type)?

您可以在网络上找到以下内容: Higher kinded type == type constructor? class AClass[T]{...} // For example, class List[T] Some say this is a higher kinded typ...

19得票2回答
Scala中类型构造器中F[_]和F[T]的区别 在Scala中,当用于类型构造器时,F[_]和F[T]有何区别?

这个问题是关于 _ 在类型构造器中使用的,而不是在定义存在类型时使用的。 所以问题是,当 _ 用作类型参数时,与像 T 这样的变量相比有什么区别。例如,F[_] 和 F[T] 之间的区别。 我能想到的唯一区别是,对于 F[_],参数本身可以有尽可能多的洞……也就是说,F[_] 可以变成 F...

16得票3回答
如何满足一个类约束,在一个需要类型构造器而不是具体类型的类的实例中?

我现在正在《第八章》中学习Learn you a Haskell,已经到了关于Functor类型类的部分。在这个部分中,作者给出了不同类型如何成为该类别实例的示例(例如Maybe、自定义的Tree类型等)。看到这些,我决定(出于乐趣和练习)尝试为Data.Set类型实现一个实例;当然,在所有这...

16得票1回答
有没有一种方法可以“删除”函子中不存储其参数的部分?

给定一个函数对象(或任何类型构造器)f,我们可以得到一个不包含其参数值的函数对象版本。我们只需定义 newtype NoArg f = NoArg (f Void)。例如: NoArg [] 就是空列表。 NoArg Maybe 就是 Nothing。 NoArg (Either e) 就...

15得票3回答
为什么在Haskell中除了类型构造器还有值构造器?

我是Haskell的新手,正在阅读《Real World Haskell》。这本书说类型构造器仅在类型签名中使用,而值构造器则在实际代码中使用。它还举了一个声明的例子,以表明它们两个名称彼此独立。如果实际代码只使用其中一个,为什么需要两个构造器?既然我们不会在实际代码中使用类型构造器,那么类型...

10得票3回答
Either a和Either Int有什么区别?Either a是什么?它是一个多态类型构造器吗?它的目的是什么?

介绍: 我理解 Maybe a 和 Maybe Int 之间的区别,也理解 Either a b 和 Either Int Int 之间的区别。我还理解 Either Int 和 Maybe 是同一类型构造器,它们都将一个类型作为参数并生成一个新类型,即它们都是类型构造器,它们都需要单个类型...

10得票1回答
隐式转换的存在使得程序编译通过,即使从未应用过。

考虑方法 f,该方法以类型构造函数 F[_] 和类型 A 作为参数。def f[F[_], A](v: F[A]) = v 让我们尝试将其应用于new Barscala> class Bar class Bar scala> def f[F[_], A](v: F[A]) = v...

8得票2回答
为什么foo[F[_], A](ff: F[A])可以接受foo(1)作为参数?

为什么在我的Scala 2.11.7 repl中,调用foo(1)可以正常工作? scala> def foo[F[_], A](fa: F[A]) = null foo: [F[_], A](fa: F[A])Null scala> foo(List(1)) res0: Nu...

8得票3回答
"((->) a)"的意思是什么?

我以前见过这种类型但不知道它的意思。它代表了什么意思,或者有一个名字吗? Prelude> :m Data.Functor Prelude Data.Functor> :t flip . (flip (<$>)) flip . (flip (<$>)) :...

8得票3回答
Haskell编译器如何“知道”IO无法拆包?

显然,以下函数是不可能的,因为无法永久地取消 IO 值(忽略 unsafePerformIO 或类似方法): unwrapIO :: IO String -> String unwrapIO (IO str) = str 然而,类似于以下的功能也是可能的: unwrapJust ...