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]
otrzymuję następujący błądHaskell Główną funkcją
Couldn't match expected type `IO t0' with actual type `[a0]'
In the expression: main
When checking the type of the function `main'
Co robię źle?
usunąłem tak, to też mi się ten sam błąd. main = qsort [1,2,3] – weima
@weima Jeśli masz 'main :: IO()' i 'qsort :: Ord a => [a] -> [a]', nie możesz powiedzieć 'main = qsort [1, 3, 2] ', ponieważ mówiłeś, że' main' ma typ 'IO()' i ma typ '[a]'. Byłoby tak, jakbyś miał int x = 1; ciąg y = x; ', większość języków programowania odrzuciłoby to jako niedopasowanie typu, ponieważ' string' i 'int' nie są takie same. Tak właśnie się dzieje, powiedziałeś "main" jest jednym typem, a następnie próbujesz ustawić go na wartość innego typu. Musisz przekonwertować wyjście 'qsort' do wartości' IO', a ponieważ chcesz ją wydrukować, funkcja 'print' może to zrobić. – bheklilr
to typ głównej stałej? Próbowałem zdefiniować main :: [Integer] tak, aby main = qsort [1,2,3] się skompilował, ale nadal kasuje. Wydaje się, że główne musi mieć i wyjścia klasy IO – weima