获取给定数的质因数数组(Haskell)

图片说明

import Data.List

main :: IO ()    -- This says that main is an IO action.
main = return () -- This tells main to do nothing

--the second primnumer Function from leture
--用下面这个教材上程序部分可以获得质数数组,采用的方法是质数筛选法,但是感觉不大对,我的具体分析放在了图片。
primnumber = 2: [n| n<-[3..], prim n primnumber]
prim n (p:xs) 
    | p*p > n = True
    | n `mod` p == 0 = False
    | otherwise = prim n xs

-------------------------------------------------------
-- 这个部分是我自己写的,用来获得一个规定数的质因数
-- 例如: 84 = [2,2,3,7] 
--跪求修改一下这个部分
primfactor :: (Int a) => a ->[a]
primfactor m 
    | npf m primnumber == True = [head primnumber, primfactor ( m / head primnumber)]

npf :: (Int a) => a -> [a] -> Bool 
npf n (x:xs)
    | n `mod` x == 0 = True
    | otherwise = npf n xs 

但是我自己写的这一个部分在

primfactor :: (Int a) => a ->[a]
npf :: (Int a) => a -> [a] -> Bool 

依然会报错,这个错是:


E:\Haskell\Uebungsblatt_2_Aufgabe_1.hs:14:16: error:
    * Expected kind `* -> Constraint', but `Int' has kind `*'
    * In the type signature: primfactor :: (Int a) => a -> [a]
   |
14 | primfactor :: (Int a) => a ->[a]

   |                ^^^^^

E:\Haskell\Uebungsblatt_2_Aufgabe_1.hs:18:9: error:
    * Expected kind `* -> Constraint', but `Int' has kind `*'
    * In the type signature: npf :: (Int a) => a -> [a] -> Bool
   |
18 | npf :: (Int a) => a -> [a] -> Bool 

   |         ^^^^^
[Finished in 0.7s]