基本上,给定{-# LANGUAGE PolymorphicKinds, ConstraintKinds, TypeFamilies #-}(以及更多,如果需要),(~)类型级操作符是否适用于类型级表达式Constraint?我试着用谷歌搜索答案,但没有运气.
我想通过与Haskell的比较,我理解Scala 2.10的新"值类"特性newtype:
trait BoundedValue[+This] extends Any { this: This =>
def upperBound: This
def lowerBound: This
}
class Probability @throws(classOf[IllegalArgumentException]) (v: Double) extends AnyVal with BoundedValue[Probability] {
val value: Double = if ((v >= 0.0) && (v <= 1.0)) v else throw new IllegalArgumentException((v.toString) + "is not within the range [0.0, 1.0]")
override val upperBound: Probability = new Probability(0.0)
override val lowerBound: Probability = new Probability(1.0)
// Implement probability arithmetic here;
// will be represented by Double at …Run Code Online (Sandbox Code Playgroud) 是否有Scala(或Java,我猜)相当于标准?我不仅仅是在讨论基准测试库:请查看HTML结果的标准.
我们不能做read someValue :: someDataType或show someValue为每种类型,因为deriving (Show, Read)必须在data声明中写.是否有一个案例,除了错误,我们不希望我们的类型可序列化?为什么Show与Read分开?是否有一个案例,除了错误,我们只想显示一些数据而不读它?如果没有,为什么不使用单一数据类型Serializable?
刚才,我正在使用Gloss库的Key数据类型,它是派生Show而不是Read,我不明白.这很遗憾,因为我想将控件的配置放在一个文件中,然后读取它,这样玩家就可以更改控件并拥有自己的配置.我不得不为Key,SpecialKey和MouseButton做包装,这不是什么大问题但是没用.
data Key' = Char' Char | SpecialKey' SpecialKey | MouseButton' MouseButton
deriving (Eq, Ord, Show, Read)
convertKey x = case x of
Char' c -> Char c
SpecialKey' sk -> SpecialKey sk
MouseButton' mb -> MouseButton mb
Run Code Online (Sandbox Code Playgroud)