小编Nic*_*año的帖子

什么是Levity多态性

正如问题的标题所示,我想知道什么是Levity多态性及其动机是什么?我知道这个页面里面有一些细节,但大部分的解释都是我的头脑.:)

虽然这个页面更友好,但我仍然无法理解它背后的动机.

haskell

76
推荐指数
1
解决办法
4658
查看次数

如何创建polyvariadic haskell函数?

我需要一个函数,它接受任意数量的参数(所有相同的类型),对它们做一些事情然后给出一个结果.在我的具体情况下,参数列表是不切实际的.

当我查看haskell库时,我看到函数printf(来自模块Text.Printf)使用了类似的技巧.不幸的是,通过查看来源我无法理解这种魔力.

有人可以解释如何实现这一点,或至少一些网页/纸/任何我可以找到一个良好的描述吗?

动机:

我需要它的原因非常简单.对于学校(计算机科学课),我们需要编写一个能够"记录"数学表达式,将其表示为字符串的模块(通过为自己的数据类型编写Num/Real/etc的实例),并执行对它的各种操作.

此数据类型包含变量的特殊构造函数,可以由值或指定函数的任何值替换.其中一个目标是编写一个函数,它使用一些变量(类型对(Char,Rational))来表达这种表达式并计算表达式的结果.我们应该看看如何最好地表达函数的目标.(我的想法:该函数返回另一个函数,它接受与函数中定义的变量一样多的参数 - 似乎是不可能的).

haskell variadic-functions function-parameter polyvariadic

69
推荐指数
5
解决办法
1万
查看次数

如何使用功能状态生成随机数?

我正在努力弄清楚如何将State的函数表示与Scala的Random类合并以生成随机整数.我正在学习Scala中的函数编程一书,因此大部分代码都是从那里获取的.

以下是State类的外观,直接来自本书:

case class State[S, +A](run: S => (A, S))
Run Code Online (Sandbox Code Playgroud)

这就是我想要做的事情:

object State {
  type Rand[A] = State[A, Random] // the Random from scala.util.Random

  def nextIntInRange(from: Int, to: Int): Rand[Int] =
  ??? _.nextInt(from - to) + from ??? // unsure about much of this

  def get(a: Rand[A]): A = ??? // also unsure; should modify state

  def getAndPreserveState(a: Rand[A]): A = ??? // ditto; should not modify state

  def diceRolls(n: Int) = {
    val roll = nextIntInRange(1, 6) …
Run Code Online (Sandbox Code Playgroud)

random state functional-programming scala

10
推荐指数
1
解决办法
991
查看次数

两个不同的类型类可以使用相同的方法名吗?

假设我有

class Foo a where
    (++=) :: a -> a -> a
    cool  :: (a -> b -> b) -> a -> b
Run Code Online (Sandbox Code Playgroud)

并想做

class Bar a where
    (++=) :: (a -> b) -> a -> b
    magic :: a -> b
Run Code Online (Sandbox Code Playgroud)

它有一个重叠的方法名称,(++=).有什么方法可以做到这一点吗?

haskell typeclass

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

如何在不刷新页面的情况下将新的HTML数据从服务器推送到浏览器

我已经看到许多网站(例如Facebook或堆栈溢出)将在生成新数据时更新某些功能(例如,帖子上的新答案).

可以说,博客中添加了一个新帖子,当时有人在博客中查看它,想法是自动将新帖子添加到博客而不刷新或让用户执行任何操作.

我曾想过每5秒左右执行一次AJAX调用,但这会对服务器发出太多请求,而且我看到我提到的网站(更新内容)没有提出任何新请求.

我真的不知道如何实现这一目标.PHP和AJAX可以实现吗?我也听说过websockets.有任何想法吗?谢谢

html ajax html5 asynchronous websocket

5
推荐指数
1
解决办法
8226
查看次数

如何有效地从 Spark 中的每一列中查找不同的值

Array为了从我尝试过的每一列中找到不同的值

RDD[Array[String]].map(_.map(Set(_))).reduce { 
(a, b) => (a.zip(b)).map { case (x, y) => x ++ y}}
Run Code Online (Sandbox Code Playgroud)

执行成功。但是,我想知道是否有比上面的示例代码更有效的方法。谢谢。

performance scala apache-spark

5
推荐指数
1
解决办法
2346
查看次数

当我尝试运行 Yesod 书中的第一个示例时出现“找不到模块 `Yesod'”

我知道这似乎与找不到模块 `Yesod'重复,但与该用户不同,ghc-pkg list它没有显示Yesod在我计算机上的输出中,他们似乎没有使用stack(我是,我不确定是否意味着我不需要担心ghc-pkg list),此外,该问题的答案(代码)对我的情况没有帮助。

耶索德书有一个例子,我一直试图去工作了好几个小时了。我会在这里重印

{-# LANGUAGE OverloadedStrings     #-}
{-# LANGUAGE QuasiQuotes           #-}
{-# LANGUAGE TemplateHaskell       #-}
{-# LANGUAGE TypeFamilies          #-}
import           Yesod

data HelloWorld = HelloWorld

mkYesod "HelloWorld" [parseRoutes|
/ HomeR GET
|]

instance Yesod HelloWorld

getHomeR :: Handler Html
getHomeR = defaultLayout [whamlet|Hello World!|]

main :: IO ()
main = warp 3000 HelloWorld
Run Code Online (Sandbox Code Playgroud)

我使用的是最新的 64 位 Ubuntu 操作系统。我一直遇到的问题是它runhaskell hello-world.hs会一次又一次地回来

hello-world.hs:6:18:
    Could not …
Run Code Online (Sandbox Code Playgroud)

haskell yesod haskell-stack

4
推荐指数
1
解决办法
1379
查看次数

Scala:如何创建一个允许我在调用时使用点表示法的函数?

尽管多次阅读Scala样式指南 - 方法调用,但我已经对此感到困惑了一段时间.

我希望能够调用此方法

def foldRVL[A,B](l: List[A], z: B)(f: (A, B) => B) = //"Right-Via-Left"
  l.reverse.foldLeft(z)((a, b) => f(b, a))
Run Code Online (Sandbox Code Playgroud)

使用这样的点符号List(1,2,3).foldRVL(0)(_ + _).

而不是这样的:foldRVL(List(1,2,3), 0)(_ + _).

此外,有时我看到的代码显示的方法实际上是在签名中采用零参数,或者比我预期的要少一个参数,并且仍然使用点符号正确地获取参数.这是如何运作的?我问这个,因为这些方法使用点符号,所以也许如果我写了类似的东西,我可以解决我的问题.

scala this infix-notation method-invocation

3
推荐指数
1
解决办法
642
查看次数

当`function [] _ = ...时,模式匹配失败; 函数_ [] = ...`语法被省略

虽然disjoint在保护条件下耗尽了所有可能的模式,但Haskell PatternMatchFail在运行时会给我一个错误.

disjoint :: (Ord a) => [a] -> [a] -> Bool
disjoint l@(x:xs) r@(y:ys)
    | null l || null r   = True
    | x == y             = False
    | x > y              = disjoint l ys -- reduce right list
    | otherwise          = disjoint xs r -- reduce left list
-- | Terminates when either list has been reduced to null, or when their head
-- elements are equal. Since lists are ordered, it only needs …
Run Code Online (Sandbox Code Playgroud)

haskell pattern-matching non-exhaustive-patterns

3
推荐指数
1
解决办法
149
查看次数