我被告知在依赖类型系统中,"类型"和"值"是混合的,我们可以将它们都视为"术语".
但是有一些我无法理解的东西:在没有Dependent Type(如Haskell)的强类型编程语言中,在编译时决定(推理或检查)类型,但是在运行时决定(计算或输入)值.
我认为这两个阶段之间肯定存在差距.试想一下如果从STDIN以交互方式读取一个值,我们如何在必须决定AOT的类型中引用该值?
例如,我需要从STDIN中读取一个自然数n和一个自然数列表xs(包含n个元素),如何将它们放入数据结构中Vect n Nat?
我试图在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.
谢谢!
我在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中找不到它.它在哪里定义?
我正在尝试(不成功)在运行时在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) 根据此链接描述存在类型:
存在类型的值,例如?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从逻辑上讲,[类的声明]表示一个类型aa -> a -> Bool居住于该类型,或者从a可以证明a -> a -> Bool(该类为此提供了两个不同的证明,分别是name==和/=)。该命题具有存在性(不要与存在性类型混淆)
类型类和存在类型之间有什么区别,为什么它们都被认为是“存在的”?
我有一个类型相互关联的元组。在我的情况下,它是一个提取函数,它提取一个值,该值又用作另一个函数的输入。
从概念上讲,我正在寻找的东西是这样的,但这不能编译:
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) 我正在使用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
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每行的含义可能有所不同?