我创建了一段代码:
intToDigit :: Char -> Int
ord :: Char -> Int
intToDigit c = ord c - ord 'a'
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,我收到此错误消息:
ChangeVowels.hs:2:1:`ord'的类型签名缺少附带的绑定
ChangeVowels.hs:4:16:不在范围内:`ord'
ChangeVowels.hs:4:24:不在范围内:`ord'
我尝试过,Import data.char但这也不起作用.
我正在尝试cabal install yesod在我的Windows机器上.我有一个相对全新的Haskell平台安装.cabal安装失败,报告我需要sqlite3 C库才能安装"持久",这是Yesod所依赖的软件包.
Run Code Online (Sandbox Code Playgroud)cabal: Missing dependency on a foreign library: * Missing C library: sqlite3
所以我去了http://www.sqlite.org/download.html并抓住了C源代码和预编译二进制代码.我尝试使用两者,无济于事:
cabal install persistent --extra-lib-dirs=C:\Path\To\C\Source\Files
cabal install persistent --extra-lib-dirs=C:\Path\To\Binary
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,我得到了相同的结果:它没有用.:(我该怎么做才能给它需要的C库?(在这种情况下是sqlite3)
我正在尝试使用列表和过滤器而不是数组和循环来实现Eratosthenes的Sieve.我不确定为什么以下表现比命令式等效表现差得多.100万应该绝对飞,但我的机器停止了.
val max = 1000000
def filterPrimes(upper: Int, seed: Int = 2, sieve: List[Int] = List()): List[Int] =
sieve.map(x => if (x % seed == 0 && x > seed) 0 else x).filter(_ > 0)
var filtered: List[Int] = (2 to max).toList
for (i <- 2 to max / 2) filtered = filterPrimes(max, i, filtered)
filtered.foreach(println(_))
Run Code Online (Sandbox Code Playgroud) -- ---------------------------------------------------------------------------
-- Instances for other mtl transformers
--
-- All of these instances need UndecidableInstances,
-- because they do not satisfy the coverage condition.
Run Code Online (Sandbox Code Playgroud)
什么是"覆盖条件"?我只能说它与MTPC和fundeps有关.
val m = scala.collection.mutable.Map[String, Int]()
// this doesn't work
m += ("foo", 2)
// this does work
m += (("foo", 2))
// this works too
val barpair = ("bar", 3)
m += barpair
Run Code Online (Sandbox Code Playgroud)
那么m += ("foo" , 2)没有工作的协议是什么?Scala给出了类型错误:
error: type mismatch;
found : java.lang.String("foo")
required: (String, Int)
m += ("foo", 2)
^
Run Code Online (Sandbox Code Playgroud)
显然Scala认为我试图+=用两个参数调用,而不是一个元组参数.为什么?这不是明确的,因为我没有使用m.+=?
根据Scaladoc,没有map在Array类中命名的方法,但是在中implicit def intArrayOps (xs: Array[Int]): ArrayOps[Int]定义了一个隐式函数scala.Predef.所以,你可以申请map上Array(1,2,3,4),如果你喜欢.但我感到困惑的是,map结果是类型Array[Int],而不是ArrayOps[Int].这是我的测试:
scala> val array = Array(1,2,3,4)
array: Array[Int] = Array(1, 2, 3, 4)
scala> array.map(x => x)
res18: Array[Int] = Array(1, 2, 3, 4)
scala> res18.isInstanceOf[Array[Int]]
res19: Boolean = true
scala> res18.isInstanceOf[scala.collection.mutable.ArrayOps[Int]]
warning: there wre 1 unchecked warnings; re-run with -unchecked for details
res20: Boolean = false
Run Code Online (Sandbox Code Playgroud) 通过高阶函数可以在无类型lambda演算中编码各种类型.
Examples:
zero = ?fx. x
one = ?fx. fx
two = ?fx. f(fx)
three = ?fx. f(f(fx))
etc
true = ?tf. t
false = ?tf. f
tuple = ?xyb. b x y
null = ?p. p (?xy. false)
Run Code Online (Sandbox Code Playgroud)
我想知道是否有任何研究已经嵌入其他不太常规的类型.如果有一些定理断言可以嵌入任何类型,那将是很棒的.也许有限制,例如只能嵌入类型*.
如果确实可以表示不太常规的类型,那么看一个例子就太棒了.我特别热衷于看看monad类型成员的样子.
monads haskell functional-programming lambda-calculus untyped-variables
有没有办法访问在finally块中的try/catch块中创建的val?或者是最终块超出范围.
def myTryCatch: Either[Exception, String] = {
try {
val w = runOrFailWithException("Please work...")
Right(w)
} catch {
case ex: Exception => {
Left(ex)
}
}
finally {
// How do I get access to Left or Right in my finally block.
// This does not work
_ match {
case Right(_) =>
case Left(_) =>
}
}
}
Run Code Online (Sandbox Code Playgroud) 对于任何.hs文件,您可以指定您所依赖的语言扩展名,如下所示:
{-# LANGUAGE Foo, Bar, Baz #-}
Run Code Online (Sandbox Code Playgroud)
cabalized项目还可以在.cabal文件中基于每个项目指定语言扩展:
extensions: Foo, Bar, Baz
Run Code Online (Sandbox Code Playgroud)
哪一个被认为是"最佳实践"?是否应使用.cabal文件中列出的所有扩展名,作为记录您的包与哪些编译器兼容的形式?或者是否应该基于每个文件记录所有扩展名,以便明确哪些文件取决于哪些扩展名?在这两个地方广泛记录怎么样?或者是介于两者之间的最佳实践?
首先,我从一些典型的类型级自然数字开始.
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeFamilies #-}
data Nat = Z | S Nat
type family Plus (n :: Nat) (m :: Nat) :: Nat
type instance Plus Z m = m
type instance Plus (S n) m = S (Plus n m)
Run Code Online (Sandbox Code Playgroud)
所以我想创建一个表示n维网格的数据类型.(在评估细胞自动机中发现的内容的概括是comonadic.)
data U (n :: Nat) x where
Point :: x -> U Z x
Dimension :: [U n x] -> U n …Run Code Online (Sandbox Code Playgroud)