相关疑难解决方法(0)

在依赖类型语言编程时,我们如何克服编译时间和运行时间差?

我被告知在依赖类型系统中,"类型"和"值"是混合的,我们可以将它们都视为"术语".

但是有一些我无法理解的东西:在没有Dependent Type(如Haskell)的强类型编程语言中,在编译时决定(推理或检查)类型,但是在运行时决定(计算或输入)值.

我认为这两个阶段之间肯定存在差距.试想一下如果从STDIN以交互方式读取一个值,我们如何在必须决定AOT的类型中引用该值?

例如,我需要从STDIN中读取一个自然数n和一个自然数列表xs(包含n个元素),如何将它们放入数据结构中Vect n Nat

haskell coq agda dependent-type idris

35
推荐指数
2
解决办法
1511
查看次数

Scala的存在类型和Java的通配符之间的区别是什么?

比Stack Overflow问题更具体一点什么是存在类型?,Scala的存在类型和Java的通配符之间有什么区别,特别是有一些说明性的例子?

在迄今为止我见过的所有内容中,它们似乎都相当.

一些参考文献.马丁奥德斯基提到了他们 ; 谷歌对我的问题最为重要:

MO:原始的通配符设计......受到存在主义类型的启发.实际上,原始论文在存在类型中具有编码.但是当实际的最终设计出现在Java中时,这种联系就失去了一点点

java type-systems scala existential-type bounded-wildcard

30
推荐指数
4
解决办法
6835
查看次数

为什么这个协议"只能用作通用约束"?

我试图在Swift中执行以下操作:

protocol ProtocolWithAlias {
    typealias T
}

protocol AnotherProtocol {
    func someFunc() -> ProtocolWithAlias
}
Run Code Online (Sandbox Code Playgroud)

但我得到错误:Protocol 'ProtocolWithAlias' can only be used as a generic constraint because it has Self or associated type requirements.

可以这样做吗?错误消息(或至少" only be used as a generic constraint"部分)对我来说似乎没有多大意义.

我正在使用最新的Xcode 6 beta 3.

谢谢!

generics swift xcode6

27
推荐指数
2
解决办法
1万
查看次数

C++概念是存在类型的一种形式吗?

我在维基百科(Existential_types)上看到存在类型的定义,它在某种程度上与C++中的概念(特别是概念精简版)相似.

C++概念是存在类型的一种形式吗?

如果没有,两者之间有什么区别?

c++ existential-type c++-concepts

11
推荐指数
1
解决办法
2061
查看次数

对价值的存在量化

我在Scala语言规范(3.2.10存在类型)中遇到了关于值的存在量化.

x: y.Inner forSome{val y : Outer}
Run Code Online (Sandbox Code Playgroud)

有人有说明性的用例吗?

T forSome {val x: S}被定义为T forSome { type t <: S with Singleton }.Singletron特性在规范(3.2.1单例类型)中提到,但我在Scaladoc中找不到它.它在哪里定义?

types scala

9
推荐指数
1
解决办法
892
查看次数

是否可以在运行时分配KnownNat?

我正在尝试(不成功)在运行时在haskell中创建一个"对象"*,其类型在运行时使用依赖类型定义.

我正在关注依赖类型的本教程,它们用于在运行时传递值的函数是一个函数,它接受Sing一个参数并使用模式匹配值Sing来获取运行时的数字.但是我无法访问任何Sing模式匹配.

我认为下面的代码可以工作,但我得到的实际上是非常令人失望的,编译器告诉我,n从类型定义来看randomNetwork,与n我在类型定义中捕获的不一样SNat.

{-# LANGUAGE
    ScopedTypeVariables, TemplateHaskell, TypeFamilies, GADTs, KindSignatures,
    TypeOperators, FlexibleContexts, RankNTypes, UndecidableInstances,
    FlexibleInstances, InstanceSigs, DefaultSignatures, DataKinds,
    RecordWildCards, StandaloneDeriving, MultiParamTypeClasses #-}

module Main where

-- some imports to make the code below main work
import Control.Monad.Random
import GHC.TypeLits
import Data.List

--import Grenade
import Data.Singletons
import Data.Singletons.TypeLits

main = do
  let sizeHidden = toSing (20 :: Integer) :: SomeSing Nat

  net0 <- case sizeHidden …
Run Code Online (Sandbox Code Playgroud)

haskell ghc dependent-type

8
推荐指数
1
解决办法
190
查看次数

为什么说类型类是存在的?

根据此链接描述存在类型

存在类型的值,例如?x。F(x)是一对包含x类型和F(x)类型值的对。而一个多态类型的值,如?x。F(x)是采用某种x类型并产生F(x)类型值的函数。在这两种情况下,类型都在某个类型构造函数F上关闭。

但是具有类型类约束的函数定义不会与类型类实例配对。

并非如此forall f, exists Functor f, ...(因为很明显并非每个类型f都具有Functor f的实例,因此exists Functor f ...并非如此)。

不是exists f and Functor f, ...(因为它适用于所有满足f的实例,不仅适用于选定的实例)。

对我来说,它forall f and instances of Functor f, ...更像是scala的隐式参数,而不是存在的类型。

并根据此链接描述类型类

[ Eq从逻辑上讲,[类的声明]表示一个类型a a -> a -> Bool居住于该类型,或者从a可以证明a -> a -> Bool(该类为此提供了两个不同的证明,分别是name ==/=)。该命题具有存在性(不要与存在性类型混淆)

类型类和存在类型之间有什么区别,为什么它们都被认为是“存在的”?

haskell typeclass

6
推荐指数
1
解决办法
187
查看次数

如何键入参数化元组?

我有一个类型相互关联的元组。在我的情况下,它是一个提取函数,它提取一个值,该值又用作另一个函数的输入。

从概念上讲,我正在寻找的东西是这样的,但这不能编译:

const a: <T>[(v:any) => T, (t:T) => void] = [ ... ]
Run Code Online (Sandbox Code Playgroud)

用例是这个。我有一个类型为的传入RPC消息any,以及一个具有众所周知的参数类型的API。我想构建一个包含两个参数的“接线计划”,一个是提取器函数,另一个是对应的API函数。

export interface API = {
    saveModel : (model:Model)    => Promise<boolean>,
    getModel  : (modelID:string) => Promise<Model>,
}

const api: API = { ... }

// this is the tuple type where i'd like to define that
// there's a relation between the second and third member
// of the tuple.
type WirePlan = [[string, (msg:any) => T, (t:T) => Promise<any>]]

const wirePlan: WirePlan = …
Run Code Online (Sandbox Code Playgroud)

typescript

5
推荐指数
1
解决办法
321
查看次数

Scala中的编译问题,具有F-bounded类型和存在类型

我正在使用F-bounded类型以便能够返回当前类型

trait Board[T <: Board[T]] {
  def updated : T
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一个使用它的通用辅助方法.

问题是:为什么以下不编译?

object BoardOps {
  def updated(board: Board[_]) = {
    board.updated.updated
  }
}
Run Code Online (Sandbox Code Playgroud)

错误是 value updated is not a member of _$1

我已经找到了这2个解决方法.它们是等价的吗?

object BoardOps {
  def updated(board: Board[_<:Board[_]]) = {
    board.updated.updated
  }
}

object BoardOps {
  def updated[T <: Board[T]](board: T) : T = {
    board.updated.updated
  }
}
Run Code Online (Sandbox Code Playgroud)

types type-systems scala existential-type f-bounded-polymorphism

3
推荐指数
1
解决办法
84
查看次数

在 TypeScript 中定义不同泛型类型的数组

interface Instruction {
  promise: Promise<unknown>,
  callback?: ($html: JQuery, data: unknown ) => void
}

const arr: Instruction[] = [
  { promise: Promise.resolve({ foo: 'bar' }), callback: ($html, data) => console.log(data.foo) },
  { promise: Promise.resolve({ bar: 'foo' }), callback: ($html, data) => console.log(data.bar) }
];
Run Code Online (Sandbox Code Playgroud)

鉴于上述情况,我希望 TypeScript 能够识别回调函数中的 data 参数与 Promise 的解析类型相同。

如果它是独立的,我可以这样做:

interface Instruction<T> {
  promise: Promise<T>,
  callback?: ($html: JQuery, data: T) => void
}
Run Code Online (Sandbox Code Playgroud)

但是,我将如何定义数组,T每行的含义可能有所不同?

arrays generics typescript

3
推荐指数
1
解决办法
108
查看次数