作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读 Real World Haskell Pg 151,我已经盯着以下段落看了一个多小时:
Recall that String is a synonym for [Char], which in turn is the type [a] where Char is substituted for the type parameter a. According to Haskell 98's rules, we are not allowed to supply a type in place of a type parameter when we write an instance. In other words, it would be legal for us to write an instance for [a], but not for [Char]. 16 comments 5335
TypeSynonymInstances
请做。
Int
是一个数据构造函数String
是数据构造器 AND 类型同义词 最佳答案
我认为问题的一部分是两个基本上不相关的限制在起作用:
data
声明的事物。或 newtype
,而不是 type
.这禁止 String
,但不是 [Char]
. Maybe Int
和 f Int
,但不是 Maybe a
. Int
,
Char
, 和
String
:
data Char = GHC.Types.C# GHC.Prim.Char#
data Int = GHC.Types.I# GHC.Prim.Int#
type String = [Char]
Int
和
Char
都是没有类型变量参数的简单类型;不涉及类型构造函数,因此您可以非常自由地使用它们创建实例。
[a]
,
Maybe a
, 和
Either a b
在实例中都有效,但
[Int]
,
Maybe [a]
, 和
Either String a
被禁止;希望你现在能明白为什么了。
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleContexts #-}
关于typeclass - 类型同义词对类型类的实例有什么影响? GHC 中的 TypeSynonymInstances 杂注有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2125674/
我是一名优秀的程序员,十分优秀!