data-kinds

    6熱度

    1回答

    我試圖創建一個類型來保證字符串的長度小於N個字符。 {-# LANGUAGE KindSignatures #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE DataKinds #-} import GHC.TypeLits (Symbol, Nat, Know

    8熱度

    1回答

    嘗試在具有類型級別列表的GADT上基於 定義模式同義詞時出現錯誤。 我設法熬下來到這個例子: {-# LANGUAGE GADTs #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE PatternSynonyms #-} mo

    1熱度

    1回答

    我最近開始與DataKinds搞混了,以便有編譯時的科學單位進行算術運算。我或多或少地想出了一種做我想做的事情的方式,但我覺得它可能會更清潔。 我需要可能是負數的整數(m^-1),所以我決定使用整數而不是自然數。但事實證明,當你做:k 5它給你GHC.Types.Nat這不符合我的需要。我結束了,而不是做自己的自定義代數整數類型。以及定義加法和減法類型族使用它。 但是,這一切似乎都是非常間接的,似

    3熱度

    1回答

    我想要做一些高級的類型級編程;這個例子是我的原始程序的簡化版本。 我有(Haskell)類型的表示形式。在這個例子中,我只涉及函數類型,基本類型和類型變量。 表示Type t由一個類型變量t參數化,以允許區分類型級別。爲了達到這個目標,我主要使用GADT。不同的類型和類型變量通過使用類型級文字來區分,因此KnownSymbol約束和使用Proxy s。 {-# LANGUAGE GADTs, Ty

    3熱度

    1回答

    是否可以指定數據庫的每個成員滿足類型類型,從而隱含類約束?例如。 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

    4熱度

    2回答

    我對Haskell比較新,我想了解HList的定義之一。 data instance HList '[] = HNil newtype instance HList (x ': xs) = HCons1 (x, HList xs) pattern HCons x xs = HCons1 (x, xs) 我有幾個具體的問題: 什麼是'[]和(x ': xs)語法我看到?它幾乎看起來像是在可變

    4熱度

    1回答

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

    2熱度

    2回答

    我試圖使用DataKinds來做類型級別的編程,但當我有嵌套在另一個這些結構之一時遇到困難。 {-# LANGUAGE DataKinds, TypeFamilies, GADTs, MultiParamTypeClasses, FlexibleInstances #-} module Temp where data Prop1 = D | E data Lower :: Prop1

    0熱度

    1回答

    我一直在努力在Haskell中構建我自己的Diplomacy模擬器來讓我的腳溼潤。 我相信我已經拿出一個像樣的定義的順序是什麼: data Order = Hold Unit Territory | Move Unit Territory Territory | Support Unit Territory Unit Territory Territory

    12熱度

    1回答

    DataKinds擴展將「值」(即構造函數)提升爲類型。例如True和False成爲不同類型的種類Bool。 我想要做的是相反的,即降低數值類型。與此簽名的函數就可以了: demote :: Proxy (a :: t) -> t 其實我可以做到這一點,例如用於Bool: class DemoteBool (a :: Bool) where demoteBool :: Proxy (