我是一个Haskell新手,所以我可能会遗漏一些基本的东西 - 在这种情况下道歉,但我不知道下面的代码有什么问题以及为什么它溢出堆栈.这是为了找到[1..x]中所有数字都能被整除的最小数字,这里使用[1,2](项目欧拉问题5是[1..20]).
module Main where
main::IO()
main = do
putStrLn $ show s where s = func 1
func :: Int -> Int
func x
| foldr1 (&&) [x `mod` y == 0 | y <- [1..2]] == True = x
| otherwise = func x+1
Run Code Online (Sandbox Code Playgroud)
我想它应该打印出'2'.
我也试过用and [mod x y == 0 | y <- [1..2]] == True = x而不是第一个后卫.在这两种情况下,我在尝试运行时都会出现堆栈溢出.我已经解决了这个问题,把所有东西放在主要加上一个列表理解,但我想知道这个有什么问题.谢谢!
我正在sockjs-tornado上构建一个服务器,并且想知道如何利用龙卷风的异步HTTP客户端 - 或其他异步设备来实现龙卷风,例如asyncmongo,tornado-redis等.显然,不可能使用tornado.web.asynchronous&tornado.gen.enginedecorators随机方法.所以,如果我需要在SockJSConnection中进行异步Mongo/HTTP/Redis调用on_message(),我该怎么做?
试图映射自定义多态类的HList我得到了可怕的"无法找到参数映射器的隐式值"错误.代码示例:
import shapeless._
trait SubTrait
case class A() extends SubTrait
case class B() extends SubTrait
case class C[T <: SubTrait](x: T)
object TheMapper extends Poly1 {
implicit def default[T <: SubTrait, L[T] <: C[T]] = at[L[T]](_.x)
}
val ab = C(A()) :: C(B()) :: HNil
println(ab.map(TheMapper))
Run Code Online (Sandbox Code Playgroud)
如果L [T]的边界是例如Iterable(参见这个非常相似的问题,解决方案和注释),这可以正常工作.我错过了什么?