在Haskell中试验和检查newtypes

时间:2017-05-01 15:59:05

标签: haskell

我正在尝试使用@ManyToOne private LearnItem learnItem; 并尝试向newtypes的用户展示newtype F。我在下面写了一个简单的用例示例,我想在应用Lib后检查newtype F

然而,编译器指出我认为someFunc实际上是F Double,因此没有Show实例,即没有实例(Show(Double)> ; Double))因使用'show'而产生(也许你还没有将一个函数应用到足够的参数?)

我明白了,但我很难想到如何为此构建一个show实例。任何人都可以想到一种方法可以保留我的F (Double -> Double),同时隐藏newtype FF'来自此库的用户吗?

someFunc'

1 个答案:

答案 0 :(得分:1)

您可以通过编写

来澄清这种情况
let arr = [{"id":1, "name": "abc"},{"id":2, "name": "fsd"},{"id":3, "name": "fasd"},{"id":4, "name": "fsdfas"},{"id":5, "name": "fad"},{"id":6, "name": "fasdf"},{"id":7, "name": "fasd"},{"id":8, "name": "fasdf"},{"id":9, "name": "fasdfs"},{"id":10, "name": "abc"}],
    json = JSON.stringify(arr);

console.log(/"id":3(,|\})/.test(json));
console.log(/"id":42(,|\})/.test(json));

MakeF上的模式匹配

newtype F a = MakeF (a -> Double)

会给func :: F SomeType -> ... func (MakeF g) = ... 。类型g :: SomeType -> Double的值与类型F a的函数同构,因此每个函数都可以进行相同的操作。

这里真正的答案是,以一种有意义的方式a -> Double一个函数是不可能的。由于您不能Show Show,因此您无法a -> Double Show