path-dependent-type

    2熱度

    3回答

    說我們有這些嵌套類和A一個實例: class A { case object B case class C(c: Int) } val a1 = new A() 現在我可以檢查a1.B是a1.B.type實例,但我怎麼能檢查類型a1.B是的任意一個A#B.type的實例,因爲編譯器不會接受該語法。 a1.B.isInstanceOf[a1.B.type] res: B

    1熱度

    1回答

    幾次現在我遇到了一個我認爲應該可以通過路徑依賴類型解決的問題,但我不確定我已經能夠執行所以以最完整或正確的方式。在Java世界中有一個枚舉(或者更常見的是一些靜態值形式的僞枚​​舉)定義了一個映射到本機類型的封閉集合,這並不罕見。 java.sql.Types就是一個很好的例子: public class Types { /** * <P>The constant in th

    0熱度

    1回答

    Scala n00b here。很確定我理解PDT,但是確定並且遇到問題;這裏有一個先前的問題Scala types: Class A is not equal to the T where T is: type T = A與示例代碼我將在這裏重現: 1: class Food 2: class Fish extends Food 3: class Grass extends Food 4:

    1熱度

    2回答

    我在Scala編程的第20.7章(Martin Odersky,Lex Spoon和Bill Venners)中有關於抽象類型主題的基本示例。下面的代碼是從清單20.10,除了我添加了似乎表面上通過在前面的例子中隱含的最後兩行: class Food abstract class Animal { type SuitableFood <: Food def eat(food:

    4熱度

    2回答

    trait Encoder[From, To] { def encode(x: From): To } object Encoder { implicit val thingToString: Encoder[Thing, String] = new Encoder[Thing, String] { def encode(x: Thing): String = x

    2熱度

    1回答

    我想模擬某些相互依賴關係案例類別的字段之間,使rhs字段的可能值將取決於類型lhs。 在下面的例子中,我沒有設法編寫type B = A.B - 它不會編譯,只有type B = A#B。毫不奇怪的是,在下面的例子中,這行代碼會編譯:SomeDomain.Foo(SomeDomain.Brr, SomeDomain.Bee.Pooh),但這樣做會失敗。 顯然我做錯了什麼。這裏有一個小的修復嗎?或者

    1熱度

    1回答

    我在斯卡拉玩(路徑)依賴類型和偶然發現以下情況,我找不到一個好的解決方案。 假設我想擁有一些依賴類型的層次結構,並且我希望他們每個人都有一個引用返回到它的「所有者」對象。我希望這個反向引用能夠在正確的「所有者」對象上調用某些方法。什麼是正確的方法來做到這一點? 這是一個小例子。有一個「基本」性狀Outer與依賴類型Inner。基礎Outer特徵定義了對依賴類型起作用的一些方法double。還有一個

    0熱度

    1回答

    一系列的隨機refactors後對周圍的工作編譯問題的搜索時提出,我發現的東西,看起來像它應該編譯,但沒有一個很簡潔的例子: trait SubtypeOf[+T] { type Type <: T } def SubtypeOf[T] :SubtypeOf[T] = new SubtypeOf[T] { type Type = T } class InVar[T] tra

    4熱度

    2回答

    考慮這個簡單的例子: class Outer { case class Inner() def test(i: Inner) = {} } 正如預期的那樣,這並不因爲類型不匹配的編譯: val o1 = new Outer() val o2 = new Outer() o1.test(o2.Inner()) // doesn't compile 如果我們想定義一

    0熱度

    2回答

    我想在運行時恢復Scala中的依賴類型。我基本上想要歸檔一個類型保存映射,其中每個鍵都有一個關聯的類型,但所有存儲的鍵值對的類型信息對Map的用戶不可見(與真棒Shapeless Map不同)。 class Key[V] { type Value = V def ->(value: V) = Pair(this, value) } trait Pair { val