gadt

    4熱度

    2回答

    我想弄清楚類型類和GADTS之間的差異,特別是在使用-XMultiParamTypeClasses擴展名時。 似乎都具有類似用途: class MyClass a b where f :: a -> b -> Bool instance MyClass String String where f s1 s2 = ... instance MyClass Int Int

    6熱度

    1回答

    使用了一些擴展變量數,我可以做這樣的事情: {-# LANGUAGE GADTs #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE DataKinds #-} type family TF (a :: Bool) where TF 'True = Int TF

    3熱度

    1回答

    在下面的代碼中,我可以替換什麼x = ...。請注意,我不想對類別a設置類別限制(當然,a也是類型Bool,因此只能採用兩種類型之一)。 {-# LANGUAGE GADTs #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE KindSignatures #-} data D (a :: Bool) where D1 :: D True

    0熱度

    1回答

    我有一個數據類型,只有在它的參數可以排序時纔有意義,但是我似乎需要深入研究一些複雜並且可能有害的東西才能使其工作(主要是GADT)。 是我在做什麼(受限數據類型)認爲不好的haskell練習,有沒有解決這個問題的方法? 對於那些有興趣,這裏的相關代碼: {-# LANGUAGE GADTs #-} {-# LANGUAGE InstanceSigs #-} import Data.List (

    3熱度

    1回答

    在下面的代碼編譯錯誤,T1和T2編譯罰款,但T3失敗: {-# LANGUAGE GADTs #-} {-# LANGUAGE TypeFamilies #-} type family F a data T1 b where T1 :: a -> T1 (F a) data T2 b where T2 :: { x2 :: a } -> T2 a data T

    4熱度

    1回答

    我想在Haskell中使用GADT的類型安全的實現張量計算的,所以規則是: 張量正維metrices與可以是'樓上'或'樓下'的indecies,例如: - 是一個沒有indecies(一個標量)的張量,是一個帶有'樓上'索引的張量,是一張張'樓上'和'樓下'indecies 您可以添加相同類型的張量,這意味着它們具有相同的indecies簽名。第一張量的第0指數是相同的類型(樓上或樓下)作爲第二

    1熱度

    1回答

    自動獲得節目實例假設我有一個複雜GADT與許多隱藏類型參數的構造函數: data T where A :: Num n => n -> T B :: (Num n, Integral m) => n -> m -> T C :: Floating a => [a] -> T -- and so on Z :: Num n => n -> n ->

    2熱度

    1回答

    我試圖建模一個「異構樹」,即。一棵樹,其中節點具有不同的「種」,每個「種」在孩子們的「種」被限制它們可能包含: type id = string type block type inline type _ node = | Paragraph : id * inline node list -> block node | Strong : id * inline nod

    1熱度

    1回答

    幾周前,我讀了Writing an interpreter using fold。我嘗試將這種方法應用到我正在處理的項目上,但由於GADT存在錯誤。這是產生相同問題的玩具代碼。 {-# LANGUAGE GADTs, KindSignatures #-} data Expr :: * -> * where Val :: n -> Expr n Plus :: Exp

    3熱度

    2回答

    此代碼 {-# LANGUAGE GADTs #-} data Expr a where Val :: Num a => a -> Expr a Eq :: Eq a => Expr a -> Expr a -> Expr Bool eval :: Expr a -> a eval (Val x) = x eval (Eq x y) = (eval x) == (e