簡體   English   中英

無法匹配預期的IO類型

[英]Couldn't match expected type IO

-- Binary Search tree

data Tree a = Empty 
    | Node a (Tree a) (Tree a) 
     deriving (Eq, Ord, Show)

leaf :: a -> Tree a
leaf x = Node x Empty Empty
insert :: (Ord a) => Tree a -> a -> Tree a
insert Empty x = leaf x
insert (Node x l r) y = case compare y x of
  GT -> Node x l (insert r y)
      _  -> Node x (insert l y) r
t1 :: Tree Int
t1 = Node 4 (leaf 3) (Node 7 (leaf 5) (leaf 10))

main = do
 insert t1 8

錯誤信息:

{-

Couldn't match expected type `IO b0' with actual type `Tree a0'
    In the return type of a call of `insert'
    In a stmt of a 'do' block: insert t1 8

-}

您的 main功能是Tree Int類型, Tree Int編譯的Haskell程序必須具有Type IO a

您可以使用return :: a -> IO a IO (Tree Int) return :: a -> IO a (為您的情況簡化簽名IO (Tree Int)Tree Int值轉換為IO (Tree Int) ):

main :: IO (Tree Int)
main = do
  return (insert t1 8)

但是,這不會將任何內容輸出到控制台,因為它只是將樹作為值返回。 要打印結果,您可以使用print :: Show a => a -> IO ()

main :: IO ()
main = do
  print (insert t1 8)

您的插入函數Tree a類型,而main通常是一系列IO操作,類型為IO a 由於Tree /= IO您有一個小問題。 也許您想打印樹, main = print (insert t1 8)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM