通常在 Haskell 中,不允許長度為 1 的元組(AFAIK)。但是,當弄亂模板 Haskell 時,我得到了這個:
oneElementTuple = $(do{
x <- newName "x";
return $ LamE
[VarP x]
(TupE [Just (VarE x)]) -- one element tuple?
})
GHCi 告訴我那oneElementTuple是 type a -> Unit a。我找不到關于這種Unit型別的任何檔案,而且它似乎不是任何基本型別類的實體,例如Showor Functor。Unit那么,如果它不僅僅是內置魔法,那么在哪里定義呢?它有用嗎?
uj5u.com熱心網友回復:
中定義了一個Unit型別GHC.Tuple。
參考來源:
-- The desugarer uses 1-tuples,
-- but "()" is already used up for 0-tuples
-- See Note [One-tuples] in TysWiredIn
data Unit a = Unit a
沒有什么花哨。它沒有特殊的元組語法。當一個人像你一樣嘗試制作一個元組時,看起來 TH 使用了這種型別。
請注意,由于此型別位于GHC.模塊內部,因此被認為是低級的。通常,在日常編程中需要單元組時,會使用Identitynewtype 來代替(這也避免了額外的提升 Unit)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/427294.html
標籤:哈斯克尔 元组 模板-haskell
