如何在编译时在haskell中进行边界检查? [英] How to do bounds-checking in haskell at compile-time?

查看:112
本文介绍了如何在编译时在haskell中进行边界检查?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对Haskell相当陌生,我想知道如何使用类型系统强制执行边界。阅读此问题并查看关于智能构造函数的链接文章我想我可以生成一个有界类型并为其生成一个构造函数例如:

pre $ data概率a = P a派生(Show,Ord,Eq)

我读过学习你一个很棒的Haskell ,你应该不会在数据中添加类型类型约束


声明


所以此时没有类型限制...



<$ p
maxBound = P 0
maxBound = P 1

smartP ::(Floating a)=>实例有界概率其中
minBound = P 0
maxBound = P 1

a - >概率
smartP x = assert(0 <= x&& x <= 1)$ P x

现在我想知道的是,如何以及如何在编译时为边界检查一个不容易用 Peano号码(如Double ...)。也许如果可能的话,我们将如何去寻找一个不可枚举但有界的类型的编码。

此外:概率是数字,我希望它们的行为类似于数字(有+ - *等在他们的工作,如你所料)。是否可以通过使 Number type-class(通过派生或其他方式)使 Probability 部分来实现此行为这不涉及以明显的方式手工编码所有功能)?



非常感谢您的任何解释。

将您的问题解释为表示无效状态不可表示的概率的最佳方式是什么,并对此进行冗余。我不是专家,不知道这是否会对您有所帮助。






我们假设也许不正确)你原本是从样本计算概率。你的 succes try 都是内存中的整数。我们甚至假设它们是任意精度的(在haskell Integer 中)。



除了它们可以被计算很快,IEEE浮点并不是表示概率的好方法(请参阅这里):

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆