我需要创建一个特定类型的空列表。
我正在创建一个内部列表的堆栈。要创建空堆栈,我需要传递空列表。但是如何传递特定类型的空列表。
const persistScrollDataAttribute = 'turbolinks-persist-scroll';
let scrollPosition = null;
const turbolinksPersistScroll = () => {
if (scrollPosition) {
window.scrollTo(0, scrollPosition);
scrollPosition = null;
}
const elements = document.querySelectorAll(`[data-${persistScrollDataAttribute}="true"]`)
for (let i = 0; i < elements.length; i++) {
elements[i].addEventListener('click', () => {
document.addEventListener("turbolinks:before-render", () => {
scrollPosition = window.scrollY;
}, {once: true})
})
}
}
document.addEventListener('turbolinks:load', turbolinksPersistScroll);
document.addEventListener('turbolinks:render', turbolinksPersistScroll);
我尝试使用data Stack' a = Stack' [a] deriving (Show)
main = print("MyName", " ", Stack' Int [])
和其他各种带方括号的组合来代替Int []
。但是没有成功。目前,我已经与
[]::Int
答案 0 :(得分:5)
您可以在双冒号(::
)之后设置类型,例如:
main = print ("MyName", " ", Stack' [] :: Stack' Int)
因此,在这里,我们将三元组的第三个参数的类型设置为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 #-}
。
然后我们可以用a
表示法指定类型参数@Type
的类型,例如:
main = print ("MyName", " ", Stack' @Int [])