Haskell中特定类型的空列表

时间:2018-10-19 11:19:23

标签: haskell

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

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

1 个答案:

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