哈斯克尔中特定类型的空列表



我需要创建一个特定类型的空列表。
我正在创建一个内部列表的堆栈。要创建空堆栈,我需要传递空列表。但是我怎样才能传递特定类型的空列表。

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[])

最新更新