typeclass

    0熱度

    3回答

    可能有人請解釋爲什麼這編譯 Prelude> 1 :: Num a => a 這並不 Prelude> 1.0 :: Num a => a 第二個例子將與Fractional工作,但Num是Fractional超。就像它的超類Integral。

    3熱度

    1回答

    一般情況下,最好是對某個函數使用最嚴格或最寬鬆的類型定義嗎?每種方法的優缺點是什麼?我發現當我使用嚴格雙打重寫my pearson correlation code時,我更容易寫出,跟隨和推理(這可能只是缺乏經驗)。但是我也可以看到,如果有更廣泛的類型定義會使這些功能更普遍適用。更嚴格的類型定義是否被視爲技術債務的一種形式? 隨着類型類: import Data.List mean :: Fr

    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

    4熱度

    1回答

    我有代碼看起來像這樣: /** * A divisor that operates on real numbers. */ case class RealDivisor(divisor: Long) extends Divisor[Double, Double] with Divisor[Long, Double] // ... with Divisor[

    1熱度

    1回答

    我正在做一個Boolean數據的類型類實例,接受其他類型的布爾值,只是爲了好玩。我創建了數據Boolean,用於表示實際的Boolean值,並且我創建了一個名爲Booleanizable的類,該類表示可以轉換爲布爾值數據的值。問題如下:我想爲屬於Num類的每個類型聲明一個instance聲明,而不是爲每個類型聲明一個聲明。我怎麼做? 只是爲了使其更清晰,代碼: module Boolean(

    0熱度

    1回答

    我無法理解類型類別函數的Coq計算(或缺少它)的行爲。下面是一個最小的工作示例: Class class1 : Set := { class_func1 : nat -> nat }. Class class2 : Set := { class_func2 : nat -> nat ; class_prop2 : forall x : nat, x = x

    1熱度

    1回答

    寫這樣的實例聲明工作正常: data Either a b = Left a | Right b instance Functor (Either a) where fmap _ (Left x) = Left x fmap f (Right x) = Right (f x) 現在可以說,我想這個反轉,左應用於F到值: instance Functor (Either

    1熱度

    1回答

    什麼我目前要做的是創建一個名爲Value類型: data Value = Num Int | Sum Int Int | Dif Int Int | Neg Int deriving (Eq) 與我要實現一個eval函數: eval :: Value -> Int eval (Num x) = x eval (Sum x y) =

    4熱度

    1回答

    在下面的代碼中,我嘗試導出無形狀的類型實例。然而,對於更復雜的案例類(它被轉換爲更復雜的HList),編譯器給了我一個「發散的隱式擴展」,即使它似乎沒有兩次解決同一種隱式類型。也許我錯過了編譯器的其他規則? (小提琴:https://scalafiddle.io/sf/WEpnAXN/0) import shapeless._ trait TC[T] sealed trait Trait1

    1熱度

    1回答

    我有一個基本的類型類: class MyClass a where (-+) :: a -> a -> a instance MyClass Int where e1 -+ e2 = e1 + e2 * 100 myFunction :: MyClass a => a -> a -> a myFunction e1 e2 = e1 -+ e2 我明白上面是如何工作