0 haskell types haskell-platform
我想将R数据的种类定义为有理数,其中R是(分母,分子),我定义为:
data R = R {n::Int,
d::Int} deriving Show
Run Code Online (Sandbox Code Playgroud)
现在我尝试做一个函数给出两个参数(一个R和一个R的列表)并返回一个等价为R的列表.我试试这个,但给我一个类型的错误.
equivalentes' :: [R] -> R -> [R]
equivalentes' [] _ = []
equivalentes' (x:xs) r
| (n x `mod` n r == 0) && (d x `mod` d r == 0) = (R(d n)x): equivalentes' xs r
| otherwise = equivalentes' xs r
Run Code Online (Sandbox Code Playgroud)
我的想法是返回这样的东西:
> equivalentes'[R(2,4),R(3,5),R(4,8)] (R(1,2))
[R (2,4),R (4,8)]
Run Code Online (Sandbox Code Playgroud)
问题在于表达方式
R (d n) x : equivalentes' xs r
Run Code Online (Sandbox Code Playgroud)
特别是
d n
Run Code Online (Sandbox Code Playgroud)
该n函数具有类型R -> Int,d函数也是如此,但您已将n其d作为参数传递给它.也许你的意思是
R (d x) x
Run Code Online (Sandbox Code Playgroud)
但既然x有类型R,这也行不通,所以你可能有意思
R (d x) (n x)
Run Code Online (Sandbox Code Playgroud)
或类似的东西.
另一方面,你做不到R (1, 2),因为(1, 2)是两个Ints 的元组,而不仅仅是两个单独的Ints.你可以做R 1 2,或者uncurry R (1, 2)如果你真的想使用元组.