我想做一个成对的类型来表示模算术。当然,它不能推导出这一点,因为这种数据类型对于所有的a和b都没有一个有意义的fmap :: (a -> b) -> Zn a -> Zn b概念,但是每当a和b达到可以从它们构造Zn实例(即Integer在这种情况下,s的类型为a,因此使用它构建Zn会导致f n :: b失败。在第二种情况下,我可以将s从a转换为Integer,然后再转换为b,但这很笨拙。整件事有点笨拙。我之所以这样做,是因为我希望能够在映射函数后实现Functor和A
在Haskell类型类中,可以引入“接口”,其中有一些“免费”类型参数,类似于"for all a:实例支持这组函数“。如果实例化这种类型类,就不能缩小这个a类型,否则就会出现关于刚性类型a的错误(比如"for all,但现在变得更窄了,这违背了原来的类型承诺“)。好的,我在我的IEnumerable类型(类)中实现了F#接口:
int
作为用Haskell编写的大型项目的一部分,我正在开发一个小型实用程序库,以封装我在代码中使用的通用范例。我正在处理的一个函数(或者两个函数)是fromLeft :: Either a b -> a和fromRight :: Either a b -> b,它们是在反手征构造函数上未定义(确切地说是error)的部分函数(Left y) -> error "fromRight: (Left _)"
无论如何,如果可能的话,我希望扩展这些函数,以便如果每个函数的第二个模式匹配的y是一个show可实