小编Dan*_*ton的帖子

Haskell错误:"缺少附带绑定"和"不在范围内"

我创建了一段代码:

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但这也不起作用.

haskell compiler-errors

8
推荐指数
2
解决办法
3万
查看次数

Cabal安装需要C库:Windows

我正在尝试cabal install yesod在我的Windows机器上.我有一个相对全新的Haskell平台安装.cabal安装失败,报告我需要sqlite3 C库才能安装"持久",这是Yesod所依赖的软件包.

cabal: Missing dependency on a foreign library:
* Missing C library: sqlite3
Run Code Online (Sandbox Code Playgroud)

所以我去了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)

sqlite haskell cabal-install yesod

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

在Scala中,为什么我的Sieve算法运行得如此之慢?

我正在尝试使用列表和过滤器而不是数组和循环来实现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)

performance functional-programming scala

8
推荐指数
3
解决办法
446
查看次数

什么是"覆盖条件"?

Statemtl中变压器的来源说明:

-- ---------------------------------------------------------------------------
-- 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有关.

haskell functional-dependencies

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

Scala Map,元组和函数参数列表之间的歧义

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.+=

scala tuples function map infix-notation

7
推荐指数
1
解决办法
624
查看次数

scala中令人难以置信的隐式数组转换

根据Scaladoc,没有mapArray类中命名的方法,但是在中implicit def intArrayOps (xs: Array[Int]): ArrayOps[Int]定义了一个隐式函数scala.Predef.所以,你可以申请mapArray(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)

arrays scala implicit

7
推荐指数
1
解决办法
1931
查看次数

将更高的kinded类型(monads!)嵌入到无类型的lambda演算中

通过高阶函数可以在无类型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

7
推荐指数
2
解决办法
1272
查看次数

在try/catch块中最终"超出范围"

有没有办法访问在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)

scala try-catch-finally

7
推荐指数
1
解决办法
428
查看次数

关于在cabalized项目中指定扩展的公约

对于任何.hs文件,您可以指定您所依赖的语言扩展名,如下所示:

{-# LANGUAGE Foo, Bar, Baz #-}
Run Code Online (Sandbox Code Playgroud)

cabalized项目还可以在.cabal文件中基于每个项目指定语言扩展:

extensions: Foo, Bar, Baz
Run Code Online (Sandbox Code Playgroud)

哪一个被认为是"最佳实践"?是否应使用.cabal文件中列出的所有扩展名,作为记录您的包与哪些编译器兼容的形式?或者是否应该基于每个文件记录所有扩展名,以便明确哪些文件取决于哪些扩展名?在这两个地方广泛记录怎么样?或者是介于两者之间的最佳实践?

haskell ghc cabal language-extension

7
推荐指数
1
解决办法
491
查看次数

类型族实例证明是否可行?

首先,我从一些典型的类型级自然数字开始.

{-# 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)

haskell type-families type-level-computation

7
推荐指数
1
解决办法
276
查看次数