嘗試在具有類型級別列表的GADT上基於 定義模式同義詞時出現錯誤。 我設法熬下來到這個例子: {-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE PatternSynonyms #-}
mo
我想要做一些高級的類型級編程;這個例子是我的原始程序的簡化版本。 我有(Haskell)類型的表示形式。在這個例子中,我只涉及函數類型,基本類型和類型變量。 表示Type t由一個類型變量t參數化,以允許區分類型級別。爲了達到這個目標,我主要使用GADT。不同的類型和類型變量通過使用類型級文字來區分,因此KnownSymbol約束和使用Proxy s。 {-# LANGUAGE GADTs, Ty
是否可以指定數據庫的每個成員滿足類型類型,從而隱含類約束?例如。 data AB = A | B
class Foo (a :: AB) where get :: proxy a -> String
instance Foo A where get _ = "A"
instance Foo B where get _ = "B"
-- note lack of constraint he
我試圖使用DataKinds來做類型級別的編程,但當我有嵌套在另一個這些結構之一時遇到困難。 {-# LANGUAGE DataKinds, TypeFamilies, GADTs, MultiParamTypeClasses, FlexibleInstances #-}
module Temp where
data Prop1 = D | E
data Lower :: Prop1
我一直在努力在Haskell中構建我自己的Diplomacy模擬器來讓我的腳溼潤。 我相信我已經拿出一個像樣的定義的順序是什麼: data Order = Hold Unit Territory
| Move Unit Territory Territory
| Support Unit Territory Unit Territory Territory
DataKinds擴展將「值」(即構造函數)提升爲類型。例如True和False成爲不同類型的種類Bool。 我想要做的是相反的,即降低數值類型。與此簽名的函數就可以了: demote :: Proxy (a :: t) -> t
其實我可以做到這一點,例如用於Bool: class DemoteBool (a :: Bool) where
demoteBool :: Proxy (