haskell - 我们什么时候在 Haskell 中使用 newtype?
问题描述
我对 type 和 newtype 有点困惑。据说newtype只能包含一个字段。我也在这里找到一个帖子。
但还不是很清楚。
因此,如果您想为特定类型声明不同的类型类实例,或者想要使类型抽象,您可以将它包装在一个新类型中,它将被认为与类型检查器不同,但在运行时相同。
任何示例都会有所帮助。谢谢!
解决方案
从您发布的报价中收集的示例用法可能是声明两个Int
幺半群。有多种方法可以考虑Int
幺半群(乘法或加法),也许您希望使用不止一种。您不能为 定义多个 monoid 实例Int
,但您可以创建两个新类型并为它们提供单独的实例。
newtype SumInt = SumInt Int
newtype ProdInt = ProdInt Int
instance Monoid SumInt where
mempty = SumInt 0
(SumInt a) `mappend` (SumInt b) = SumInt (a + b)
instance Monoid ProdInt where
mempty = ProdInt 1
(ProdInt a) `mappend` (ProdInt b) = ProdInt (a*b)
推荐阅读
- c# - 比较日期时间,看看是否已经过了一小时
- r - 这个循环的布尔输出的解释是什么?
- python - 如何从网络摄像头 OpenCV 裁剪圆形图像并删除背景
- powershell - 从表格模型中提取 DMV 结果的 Powershell 脚本
- javascript - 如何在反应模糊时按排序顺序显示密码?
- swift - 计算结构数组中相同值的数量
- azure-active-directory - 将自定义 Azure AD 角色分配给安全组
- ubuntu - 新远程节点上的 Rundeck 身份验证失败
- c++ - 使用放置 new 构造的 C++ volatile 对象
- ios - 在某些 iPhone 设备上,Share Pass 未显示为选项