如预期的那样,可以正常工作:
valFrac :: Fractional a => a
valFrac = undefined
fNum :: Num a => a -> a
fNum a = undefined
resFrac :: Fractional a => a
resFrac = fNum valFrac -- Works as expected because every
-- Fractional is also a Num.
-- So as expected, we can pass
-- a Fractional argument into
-- a Num parameter.
Run Code Online (Sandbox Code Playgroud)
另一方面,以下方法也适用。我不明白为什么。
fFrac :: Fractional a => a -> a
fFrac a = undefined
valNum :: Num a => a
valNum …Run Code Online (Sandbox Code Playgroud) 这似乎适用于GHCi和GHC。我将首先以GHCi为例。
给定i类型已推断如下:
Prelude> i = 1
Prelude> :t i
i :: Num p => p
Run Code Online (Sandbox Code Playgroud)
鉴于这succ是在上定义的函数Enum:
Prelude> :i Enum
class Enum a where
succ :: a -> a
pred :: a -> a
-- …OMITTED…
Run Code Online (Sandbox Code Playgroud)
那Num不是以下内容的“子类”(如果可以使用该术语)Enum:
class Num a where
(+) :: a -> a -> a
(-) :: a -> a -> a
-- …OMITTED…
Run Code Online (Sandbox Code Playgroud)
为什么succ i不返回错误?
Prelude> succ i
2 -- works, no error
Run Code Online (Sandbox Code Playgroud)
我希望:type …
有没有理由为什么:infoghci 的输出在它所属的每个类之后列出类型名称?例如
Prelude> :info Int`
Run Code Online (Sandbox Code Playgroud)
版画
...
instance Bounded Int -- Defined in `GHC.Enum'
instance Enum Int -- Defined in `GHC.Enum'
instance Eq Int -- Defined in `GHC.Classes*emphasized text*'
...
Run Code Online (Sandbox Code Playgroud)
我更喜欢读的是:
Prelude> :info Int
...
instance Bounded -- Defined in `GHC.Enum'
instance Enum -- Defined in `GHC.Enum'
instance Eq -- Defined in `GHC.Classes*emphasized text*'
...
Run Code Online (Sandbox Code Playgroud)
甚至更好的是简短的表示法
Prelude> :info Int
...
instance of Bounded, Enum, Eq,...
Run Code Online (Sandbox Code Playgroud) 鉴于以下 JUnit 测试,surefire 将运行TestA两次TestB。第一次是单独测试,第二次是作为测试套件的一部分。这似乎是一种不受欢迎的行为。事实上,流行的 IDE(例如 IntelliJ)只会作为测试套件的一部分运行一次测试。
这是一个错误吗?有没有办法配置 Surefire-plugin 使其仅作为测试套件的一部分运行?
GitHub上提供示例项目
@RunWith(Suite.class)
@Suite.SuiteClasses({TestA.class, TestB.class})
public class TestSuite
{}
public class TestA {
@Test
public void test() {
System.out.println("=== RUN " + this.getClass());
}
}
public class TestB {
@Test
public void test() {
System.out.println("=== RUN " + this.getClass());
}
}
Run Code Online (Sandbox Code Playgroud)