type-level-computation

    3

    1答えて

    shapeless自然数で興奮して遊んで、整数値を得るための最良のアプローチが何であるかと思います。ナツメの産物。 shapeless nat.scalaから 抜粋: trait Prod[A <: Nat, B <: Nat] { type Out <: Nat } trait ProdAux[A <: Nat, B <: Nat, C <: Nat] object Prod

    7

    1答えて

    まず、いくつかの典型的なタイプレベルの自然数のものから始めました。 {-# LANGUAGE KindSignatures #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE TypeFamilies #-} data Nat = Z | S Nat type family Plus (n :: Nat

    5

    1答えて

    の内側に次のコードは、 case class Pair(a: String, b: Int) val pairGen = Generic[Pair] object size extends Poly1 { implicit def caseInt = at[Int](x => 1) implicit def caseString = at[String](_.lengt

    6

    1答えて

    これはa question I asked almost two years agoのフォローアップです。私はまだベクトル/行列/テンソルの次元が型システム(Peanoの番号付け)を使ってコード化されている小さな線形代数ライブラリを書く型システムを試しています。これにより、コンパイラはバイナリ演算を対応する次元のオブジェクトに制限することができます。 正常に動作しますが、手動で各寸法タイプを指定す

    6

    1答えて

    は、それは次のように型クラスを実装することが可能です: xと yは、このタイプのクラスの同じインスタンスの両方あるとき isEq x yがtrueを返す class SomeClass e where isEq :: (SomeClass e') => e -> e' -> Bool ? コンテキスト:これは、実行時の型テストを取得する際に、薄く隠された試みです。最初は私はHaske

    22

    1答えて

    私の質問は、おそらく例の形で説明するのが最も簡単です: type family Take (n :: Nat) (xs :: [k]) :: [k] type instance Take 0 xs = '[] type instance Take (n+1) (x ': xs) = x ': Take n xs (+)は、タイプファミリー自体されているため、ここで第二のインスタンスが、