我在nodejs中安装了包Kineticjs并出现以下错误消息:
Kinetic.window = Kinetic.document.createWindow();
^
TypeError: undefined is not a function
at /kinetic/kinetic.js:608:47Run Code Online (Sandbox Code Playgroud)
我刚刚开始学习Idris,我正在阅读" 使用Idris进行类型驱动开发 "一书.第二章的示例练习之一是编写一个函数,给定一个字符串,该函数确定该字符串中单词的平均长度.我的解决方案如下:
average : String -> Double
average phrase =
let werds = words phrase
numWords = length werds
numChars = the Nat (sum (map length werds)) in
cast numChars / cast numWords
Run Code Online (Sandbox Code Playgroud)
但是,由于这numChars条线,我在解决这个问题时遇到了很多麻烦.出于某种原因,除非我明确使用类型,否则不会进行类型检查the Nat.错误说明:
Can't disambiguate since no name has a suitable type:
Prelude.List.length, Prelude.Strings.length
Run Code Online (Sandbox Code Playgroud)
这对我来说并没有多大意义,因为无论使用哪个定义length,返回类型都是Nat.这一点得到了以下事实的支持:在REPL中可以无错误地完成相同的操作序列.这是什么原因?
理论上可以将任何Coq证明转换为Idris还是有任何限制?更抽象的问题:Idris类型系统在lambda多维数据集上的位置是什么?
这些问题的原因在于我试图了解Idris类型系统如何(和如果)与Coq类型系统相媲美.
我试图从"精益证明中的证据"第7章中理解归纳类型.
我为自己设定了一个任务,证明自然数的继承者有平等的替代属性:
inductive natural : Type
| zero : natural
| succ : natural -> natural
lemma succ_over_equality (a b : natural) (H : a = b) :
(natural.succ a) = (natural.succ b) := sorry
Run Code Online (Sandbox Code Playgroud)
经过一些猜测和相当详尽的搜索后,我能够满足编译器的几种可能性:
lemma succ_over_equality (a b : natural) (H : a = b) :
(natural.succ a) = (natural.succ b) :=
eq.rec_on H (eq.refl (natural.succ a))
--eq.rec_on H rfl
--eq.subst H rfl
--eq.subst H (eq.refl (natural.succ a))
--congr_arg (? (n : natural), (natural.succ n)) H …Run Code Online (Sandbox Code Playgroud) 考虑这些功能
f1 :: Maybe Int
f1 = return 1
f2 :: [Int]
f2 = return 1
Run Code Online (Sandbox Code Playgroud)
两者都有相同的说法return 1。但结果是不同的。f1赋予价值Just 1并f2赋予价值[1]
看起来 Haskellreturn根据返回类型调用了两个不同的版本。我想更多地了解这种函数调用。编程语言中有此功能的名称吗?
我正在尝试使用Idris实现总解析器,基于本文.首先,我尝试实现更基本的识别器类型P:
Tok : Type
Tok = Char
mutual
data P : Bool -> Type where
fail : P False
empty : P True
sat : (Tok -> Bool) -> P False
(<|>) : P n -> P m -> P (n || m)
(.) : LazyP m n -> LazyP n m -> P (n && m)
nonempty : P n -> P False
cast : (n = m) -> P n -> P m
LazyP …Run Code Online (Sandbox Code Playgroud) 我希望能够明确地将一个除了Type虚拟构造函数之外的其他参数应用于文档目的.但TypeApplications似乎不支持这种情况:
{-# LANGUAGE GADTs, PolyKinds, ScopedTypeVariables, TypeApplications #-}
data EQ :: k -> k -> * where
Refl :: EQ a a
data Wrap (a :: k) = Wrap (EQ a a)
wrap :: forall (a :: k). Wrap a
wrap = Wrap @a Refl
Run Code Online (Sandbox Code Playgroud)
导致错误
ProxyApply.hs:9:14: error:
• Expected a type, but ‘a’ has kind ‘k’
• In the type ‘a’
In the expression: Wrap @a Refl
In an equation for ‘wrap’: wrap = Wrap …Run Code Online (Sandbox Code Playgroud) 我有一个库来编写索引类型,而不必显式地索引索引.这通过隐藏不相关的管道导致更清洁的顶级类型.它是这样的:
Section Indexed.
Local Open Scope type.
Context {I : Type} (T : Type) (A B : I -> Type).
Definition IArrow : I -> Type :=
fun i => A i -> B i.
Definition IForall : Type :=
forall {i}, A i.
End Indexed.
Notation "A :-> B" := (IArrow A B) (at level 20, right associativity).
Notation "[ A ]" := (IForall A) (at level 70).
Run Code Online (Sandbox Code Playgroud)
然而,Coq忽略了我的要求,使IForall隐式引入的通用量词如下所示:
Fail Definition id {A : nat -> Type} …Run Code Online (Sandbox Code Playgroud) 我希望能够编写一个函数来检查是否使用相同的头构造函数构建了两个值.这个功能:
数据类型声明的大小不应该是线性的
如果扩展数据类型,应该继续工作
例如,这是不满意的(它是线性的,如果我添加任何额外的构造函数,catchall将使函数无效):
data E = A Int | B String | C
sameCons :: E -> E -> Bool
sameCons t u = case (t, u) of
(A{}, A{}) -> True
(B{}, B{}) -> True
(C{}, C{}) -> True
_ -> False
Run Code Online (Sandbox Code Playgroud)
在OCaml中,可以使用Obj模块中的不安全函数来完成该操作.我们可以在Haskell中做类似的事情(ghc特定的解决方案也可以)吗?
isMember:: a -> [a] -> Bool
isMember y [] = False
isMember y (x:xs) =
if y == x then
True
else
isMember y xs
Run Code Online (Sandbox Code Playgroud)
尝试创建一个函数来识别某些东西是否是列表的成员.例如:
isMember 6 [1,2,3,4,5,6]
>True
Run Code Online (Sandbox Code Playgroud)
但是我一直得到一个编译器错误,声明'因使用'=='而导致的(Eq a)没有实例
帮助将不胜感激(我是函数语言中的Haskell&Recursion的新手,所以解释为我五岁.)