existential-type

    3熱度

    1回答

    考慮下面的兩個代碼。他們完成相同的目標:只有這樣A[T] -s可以存儲在T延伸C 但是他們使用兩種不同的方法來實現這一目標的Container: 1)existentials 2)協方差 我更喜歡第一種解決方案,因爲A保持簡單。爲什麼我會想要使用第二種解決方案(協方差),有什麼理由嗎? 我與第二個解決方案的問題是,它是在這個意義上,它不應該是A -s責任來形容我可以在一個容器倉庫並沒有什麼不自然,

    0熱度

    1回答

    我正在通過drmacvier博客瞭解Scala中的存在類型。閱讀完後,我正在試驗類型,我正在按照以下方式檢查類型的相等性,如rnduja博客中所述。 def implicitly[A](implicit a: A) = a // To check equality of two types class =:=[A, B] implicit def equalTypeInstance[A]

    1熱度

    1回答

    只有多態函數才能應用於存在類型的值。這些屬性可以用表達式的相應量詞來表示,並以自然變換爲特徵。 同樣,當我們定義了一個類型構造 data List a = Nil | Cons a (List a) 這種類型的構造適用於所有a,而式家庭允許具有非均勻類型構造 type family TRes i o type instance TRes Bool = String type instanc

    0熱度

    2回答

    下面的類層次結構: trait Provider[A] { def get(): Seq[A] } abstract class ProviderImpl[A] extends Provider[A] { final override def get(): Seq[A] = Seq() } trait HasX { def getX: Int } t

    4熱度

    3回答

    數據Foo a的定義如下: data Foo a where Foo :: (Typeable a, Show a) => a -> Foo a -- perhaps more constructors instance Show a => Show (Foo a) where show (Foo a) = show a 一些實例: fiveFoo :: Fo

    1熱度

    1回答

    我有一些選項,當它們不是我想要的時候不想運行我的變換函數。 當前處理選項的方法是這樣的: def writeOptionalXml[T](content: Option[T], mapFn: T => Xml): Xml = content match { case Some(c) => mapFn(c) case None => NodeSeq.Empty }

    1熱度

    1回答

    爲什麼下面的代碼不能編譯? trait B[T <: B[T]] case class A[T <: B[T]](t: T) class C() extends B[C] val c: C = new C() val r2: A[_] = A(c) //compiles val r3: A[_] = A(c) //compiles

    4熱度

    1回答

    這裏有幾個類似的問題,我讀了它們,發現沒有答案可以讓我的代碼工作。我想我碰到了一個需要比正常情況下更精確的類型規格的角落案例。 我的情況用兩個字。我想創建非常簡單的異構列表示例來加深我對scala語言的理解。我給自己設置的限制是:沒有任何形式的暗示,只是普通的scala類型系統。 Implicits可以使許多事情變得更容易,但我想努力嘗試。 我已經工作的代碼,但我想改進它。在這裏它是: seale

    4熱度

    2回答

    對類型變量進行參數化很好,但不能縮放。作爲可能發生的一個例子,http://oleg.fi/gists/posts/2017-04-26-indexed-poptics.html給出了一個包含9個類型變量的抽象。我一直在研究程序轉換的框架,這些程序轉換由程序設計語言進行了參數化,並且可以想象將來有幾十或幾百個參數。 所以這裏的基本問題:我有一個數據類型T,它是參數化的N類型。如何在T上編寫一個函數

    2熱度

    1回答

    我想表達F#自由單體的教會編碼。 Free是專門針對特定仿函數的,Effect。 我可以寫出return_ : 'T -> Free<'T>和bind: ('T -> Free<'U>) -> Free<'T> -> Free<'U>沒有任何問題。 我的實施草圖如下。 type Effect<'T> = GetStr of (string -> 'T) | PutStr of