我需要创建一个特定类型的空列表。
我正在创建一个内部列表的堆栈。要创建空堆栈,我需要传递空列表。但是我怎样才能传递特定类型的空列表。
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]
的空列表"。
请注意,这将打印一个带有 3 元组的括号和逗号的值:
Prelude> print ("MyName", " ", Stack' [] :: Stack' Int)
("MyName"," ",Stack' [])
如果你想在没有"3元组噪音"的情况下打印它,你应该构造一个字符串,例如通过使用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 #-}
。
然后,我们可以指定类型参数的类型,a
@Type
表示法,例如:
main = print ("MyName", " ", Stack'@Int[])