如何修复此肯定列表 haskell 代码?

How can I fix this positive list haskell code?

编写一个函数,将列表中的所有正元素相乘! 我试图做到,但我需要帮助,因为它不起作用。有人可以帮我解决问题吗?

positive :: (Num a, Ord a) => [a] -> a
positive x
  | x> 0 = x * y
  | otherwise = Nothing

Example:
positive [1..10] == 3628800
positive ([1..10] ++ [-2, -5, -6]) == 3628800
positive [3, 5, 66, -8, -4, 5, 6, 93, -4567, 56] == 154677600 

您不能使用 x > 0,因为 x 是一个列表。您可以在 (x:xs) 上对 non-empty 列表进行模式匹配,第一项为 x,其余项为 xs;在 [] 上为空列表。

所以函数应该如下所示:

positive :: (Num a, Ord a) => [a] -> a
positive [] = …    -- (1)
positive (x:xs)
  | x> 0 = …       -- (2)
  | otherwise = …  -- (3)

需要填写部分的地方。第一部分 (1) 应该 return 在列表为空的情况下的结果。第二个 (2) 有一个正数 x,应该递归列表的其余部分 xs 并将两者相乘。最后,第三种情况应该递归列表的其余部分 xs,因为 x 小于或等于零。