module Main where
qsort :: Ord a => [a] -> [a]
qsort [] = []
qsort (x : xs) = qsort smaller ++ [x] ++ qsort larger
where
smaller = [a | a <- xs , a <= x]
larger = [a | a <- xs , a > x]
main = do qsort [1,3,2]
tôi nhận được lỗi sauchức năng chính Haskell
Couldn't match expected type `IO t0' with actual type `[a0]'
In the expression: main
When checking the type of the function `main'
Tôi đang làm gì sai?
tôi đã xóa lỗi, sau đó tôi cũng gặp lỗi tương tự. main = qsort [1,2,3] – weima
@weima Nếu bạn có 'main :: IO()' và 'qsort :: Ord a => [a] -> [a]', bạn không thể nói 'chính = qsort [1, 3, 2] ', bởi vì bạn muốn nói rằng' main' có kiểu 'IO()' và nó có kiểu '[a]'. Nó sẽ giống như nếu bạn có 'int x = 1; string y = x; ', hầu hết các ngôn ngữ lập trình sẽ từ chối điều này như một kiểu không khớp vì' string' và 'int' không giống nhau. Đó là những gì đang xảy ra ở đây, bạn đã nói 'main' là một loại và sau đó bạn cố gắng thiết lập nó bằng một giá trị của một kiểu khác. Bạn phải chuyển đổi đầu ra của 'qsort' thành một giá trị' IO', và vì bạn muốn in nó, hàm 'print' có thể làm điều này. – bheklilr
là loại cố định chính? tôi đã cố gắng để xác định chính :: [Integer] để chính = qsort [1,2,3] sẽ biên dịch, nhưng nó vẫn erros ra. có vẻ chính phải có và IO lớp đầu ra – weima