首先,我想道歉,如果我重複這一點,但我到處搜索,而沒有找到我的問題的答案。 假設我有以下代碼: data TestType = Nothing | Int | Float deriving (Show)
jaykay :: TestType -> [Char]
jaykay Int = "This is an int"
jaykay Float = "This is float!"
ja
我只是在學習關於存在性量化,GADT和KindSignatures等的所有事情。爲此,我嘗試想出一些小程序,這些程序可以幫助我更好地理解所有內容。 現在我有了這個小片段(這實際上編譯,所以你可以嘗試一下你自己,需要矢量和MTL包),並想知道它是否是在所有可能做的我是什麼試圖完成或指導我如何使它工作 {-# LANGUAGE KindSignatures #-}
{-# LANGUAGE Exis
證明我想隱藏在GADT某些類型的信息,在這裏忘掉了key型 data Query where
Query :: Ord key => Map.Map key String -> Query
one :: Ord key => key -> Query
one k =
let m = Map.insert k "hello" Map.empty
in Query
這個標題確實不是很具描述性,但我不知道如何用簡短的標題來描述這個。我會很感激任何建議! 我將要提出我的問題:) 的一個非常簡化的版本,所以我有一個類型類 class Known f a where
known :: f a
這被認爲是能夠產生一個給定的規範建設鍵入某個索引,對於使用GADT和其他東西很有用。我給出this的簡化版本以及相關部分。 所以這是很明顯的Proxy一個實例:
斯卡拉11.2是給我這個錯誤: error: type mismatch;
found : Seq[Some[V]]
required: Seq[Option[?V8]] where type ?V8 <: V (this is a GADT skolem)
val output = f(ivs.map(iv => Some(iv.get._1)))
^
我們如何在GADT上進行模式匹配?在這種情況下,我遇到了Bigarray的GADT問題。更具體地說,該代碼 let print_layout v = match Bigarray.Genarray.layout v with
| Bigarray.C_layout -> Printf.printf "C layout\n"
| Bigarray.Fortran_layout -
在ocaml manual§7.20的GADT的基本示例中,「type a」的含義是什麼。 ? 爲什麼宣稱「eval:一個術語 - > a」還不夠? type _ term =
| Int : int -> int term
| Add : (int -> int -> int) term
| App : ('b -> 'a) term * 'b term
我偶然發現了以下小問題。我使用哈斯克爾記錄語法,連同GADTs: {-# LANGUAGE GADTs #-}
data Test a where
Test :: {someString :: String, someData :: a} -> Test a
現在我想用不同類型someData創建一個新的Test值,但someString(相同的值來證明記錄更新語法的用法): t