我开始学习Haskell。我试图运行此代码发生检查:无法构造无限类型:t〜[t]
-- Helpers.hs
module Helpers
where
lst1 +++ lst2 = if null lst1
then lst2
else (head lst1) : (tail lst1 +++ lst2)
reverse2 lst = if null lst
then []
else reverse2 (tail lst) : (head lst)
-- Main.hs
import Helpers
main :: IO()
main = putStrLn . reverse2 [2, 8, 7]
我收到此错误:
D:\Haskell\project>cabal configure
Resolving dependencies...
Configuring one-0.1.0.0...
D:\Haskell\project>cabal build
Building one-0.1.0.0...
Preprocessing executable 'one' for one-0.1.0.0...
[1 of 2] Compiling Helpers (src\Utils\Helpers.hs, dist\build\one\one-t
mp\Helpers.o)
src\Utils\Helpers.hs:11:21:
Occurs check: cannot construct the infinite type: t ~ [t]
Relevant bindings include
lst :: [[t]] (bound at src\Utils\Helpers.hs:9:10)
reverse2 :: [[t]] -> [t] (bound at src\Utils\Helpers.hs:9:1)
In the first argument of `(:)', namely `reverse2 (tail lst)'
In the expression: reverse2 (tail lst) : (head lst)
我怎样才能解决这个问题?
你什么时候开始已经能够使用类型的'[[名单[[[[... [[[[[a]]]]] ....]]]]]]]]]]?这就是'a〜[a] '你在描述 – AJFarmar
而且,它是非常单一的,并且容易出错,在时尚中使用null。模式匹配远远优越。 – PyRulez