![](/img/trans.png)
[英]Haskell ambiguous type variable compiler error when foldMap on empty List
[英]Empty List of specific type in Haskell
我需要創建一個特定類型的空列表。
我正在創建一個內部列表的堆棧。 要創建空堆棧,我需要傳遞空列表。 但是如何傳遞特定類型的空列表。
data Stack' a = Stack' [a] deriving (Show)
main = print("MyName", " ", Stack' Int [])
我嘗試了[]::Int
和帶有括號的各種其他組合,而不是Int []
。 但是沒有成功。 目前我已經與
ls :: [Int]
ls = []
Stack' ls
您可以在雙冒號( ::
:)之后設置類型,例如:
main = print ("MyName", " ", Stack' [] :: Stack' Int)
這里我們所設定的是,3元組的第三個參數的類型與類型的對象Stack' Int
。
或者在這里您也可以在列表級別設置類型(但是這些是等效的):
main = print ("MyName", " ", Stack' ([] :: [Int]))
或更規范:
main = print ("MyName", " ", Stack' ([] :: [] Int))
因此,這里我們指定“ 類型為[Int]
的空列表 ”。
請注意,這將打印帶有三元組括號和逗號的值:
Prelude> print ("MyName", " ", Stack' [] :: Stack' Int)
("MyName"," ",Stack' [])
如果要打印時不帶有“三元組噪音”,則應構造一個字符串,例如,使用show :: Show a => a -> String
:
main = putStrLn ("MyName " ++ show (Stack' [] :: Stack' Int))
然后產生:
Prelude> putStrLn ("MyName " ++ show (Stack' [] :: Stack' Int))
MyName Stack' []
我們還可以利用GHC擴展 : TypeApplication
。
在這種情況下,我們需要使用-XTypeApplication
標志進行編譯,或者在文件的開頭寫入{-# LANGUAGE TypeApplication #-}
。
然后,我們可以使用@Type
表示法指定type參數a
的類型,例如:
main = print ("MyName", " ", Stack' @Int [])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.