小编Rob*_*een的帖子

适用于简单IO示例的适用于monadic风格

这里的两位非常简单的功能fg.

{-# LANGUAGE ScopedTypeVariables #-}

module Test where

import Control.Applicative

f :: IO ()
f = do
    y <- (<*>) (pure (show . (*10))) (read <$> readFile "data")
    writeFile "out" y

g :: IO ()
g = do
    y <- (readFile "data" >>= return . show . (*10) . read)
    writeFile "out" y
Run Code Online (Sandbox Code Playgroud)

读取文件并*10f写入应用性风格pure(<*>).读取和*10输入的文件g是以monadic样式编写的>>=.(我一直在使用刻意避免liftMg强调以下问题).

f和之间的语义差异是g什么?或者在这种情况下,它只是一种风格选择吗?

monads haskell applicative

2
推荐指数
1
解决办法
284
查看次数

scalac在ScalaTest测试中找到了错误的所有方法

我有延伸的ScalaTest 2类GeneratorDrivenPropertyChecks,也间接地延伸FeatureSpecMatchers(经由性状我写延伸这两个类).它有这样的代码:

forAll(mySequence) { myItem =>
  myItem.applicationID should be (foo.applicationID)
}
Run Code Online (Sandbox Code Playgroud)

这无法编译,因为scalac说:

[error] APISpec.scala:253: value applicationID is not a member of Seq[com.company.Item]
[error]          myItem.applicationID should be (foo.applicationID)
[error]                 ^
Run Code Online (Sandbox Code Playgroud)

事实证明,至少根据Eclipse Scala IDE,编译器正在解析"forAll",意思是这个方法,在GeneratorDrivenpropertyChecks:

  /**
   * Performs a property check by applying the specified property check function to arguments
   * supplied by the specified generators.
   *
   * <p>
   * Here's an example:
   * </p>
   *
   * <pre class="stHighlight">
   * import org.scalacheck.Gen
   *
   * // …
Run Code Online (Sandbox Code Playgroud)

scala scalatest scalacheck

2
推荐指数
1
解决办法
1143
查看次数

使用mercurial为什么我会想要合并而不提交?

也许我有多年的偏见,svn但为什么我会想要与不同的分支合并然后在提交前做一些更改.该hg输出本身否则建议:

(branch merge, don't forget to commit)
Run Code Online (Sandbox Code Playgroud)

亲爱的hg,那你为什么不这样做呢?

version-control merge mercurial

2
推荐指数
1
解决办法
43
查看次数

首先遍历图广度,标记Haskell中的访问节点

所以问题很简单.给定一个图(我希望图的结构在这个问题上没有多大关系),我该怎么做呢?

我最近问过一个关于生成列表的问题,其中每个元素都会在其末尾附加许多元素.答案应该有希望让我做一个我需要做BFS的队列.但是搜索需要另一个关键组件,它将节点标记为已访问,因此我们不会再次检查它们.这也需要在算法的执行上没有开销.无论是标记还是阅读.

既然Haskell不允许我改变状态,那我该怎么做呢?

(我不是在寻找将命令式代码翻译成Haskell的方法.惯用的Haskell解决方案会非常棒.)

haskell graph-theory breadth-first-search

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

更改cabal文件后更新Intero flycheck

我在emacs下使用Intero来编辑我的新Haskell项目.我向我的代码添加了第三方库的导入,以查看Intero是否会自动添加必要的依赖项,但事实并非如此.所以我.cabal手动编辑了文件以添加必要的依赖项.现在我该怎么做 - 没有重启emacs?

我尝试cabal install --dependencies-only; cabal configure在命令行运行并且它们成功运行,但是flycheck缓冲区仍然显示错误.

emacs haskell haskell-mode intero

2
推荐指数
1
解决办法
396
查看次数

如何使用 Scala 将字符串转换为 ASCII

我想将每个单词转换为十进制ascii。
例如“RESEP”:
R = 82,
E = 69,
S = 83,
E = 69,
P = 80

我的代码是:

val LIST_KEYWORD = List("RESEP",
"DAGING SAPI",
"DAGING KAMBING")

val RUBAH_BYTE = LIST_KEYWORD.map(_.split(",")).map
{
  baris =>
    (
      baris(0).getBytes
    )
}
Run Code Online (Sandbox Code Playgroud)

然后,我被卡住了,我不知道接下来应该做什么。

ascii scala

2
推荐指数
1
解决办法
5277
查看次数

撤消刚刚推送的git合并并重做合并

我有一些本地提交,并且对主人进行了更改.所以我做了一个:

 git pull // it automatically merged and had a conflict with one file only.
 subl <file> // Made the wrong fix and saved it
 git commit // It opened nano and I Typed "fixed merge" saved it 
 git push master origin
Run Code Online (Sandbox Code Playgroud)

如何在拉动之前返回并重做合并并推送?特别是在合并之前回到右边.

git merge

2
推荐指数
1
解决办法
1346
查看次数

如何在飞行中使用IO monad输出

这就是我在做的事情:

data Person = Person (IORef String) (IORef Int)
name <- newIORef "Boston"
age <- newIORef 100
p = Person name age
Run Code Online (Sandbox Code Playgroud)

我想知道我是否可以将它们放在一行中,例如:

p = Person (newIORef "Boston") (newIORef (100::Int))
Run Code Online (Sandbox Code Playgroud)

有没有办法把它们放在一行?

monads haskell

2
推荐指数
1
解决办法
94
查看次数

如何在使用IO时在Haskell中的两个函数调用之间共享IORef状态?

我正在努力学习Haskell,我正在玩IORef,我试图保存并查找记录.我的代码看起来像这样(注意我在这个例子中选择了"String"作为IORef类型只是为了方便和简介,在我的实际代码中我正在使用记录.而且还忽略我使用的是Set而不是一张地图,我会改变一下):

module MyTest where

import           Data.IORef
import           Data.Set
import           Data.Foldable          (find)

type State = (Set String)
type IORefState = IORef State

saveStringToState :: IO IORefState -> String -> IO String
saveStringToState stateIO string = do
  state <- stateIO
  atomicModifyIORef
    state
    (\oldStrings ->
       let updatedStrings = insert string oldStrings
       in (updatedStrings, updatedStrings))
  stringsState <- readIORef state :: IO State
  putStrLn ("### saved: " ++ show stringsState)
  return string

findStringInState :: IO IORefState -> String -> IO (Maybe String)
findStringInState …
Run Code Online (Sandbox Code Playgroud)

haskell shared-state ioref

2
推荐指数
1
解决办法
158
查看次数

证明n = m和m = o,那么Idris中的n + m = m + o?

我试图通过查看一些软件基础练习(最初用于Coq,但我希望对Idris的翻译不太糟糕)来提高我的Idris技能.我在"练习:1星(plus_id_exercise)"中遇到问题,其中包括:

删除"已录取".并填写证明.

Theorem plus_id_exercise : ? n m o : nat,
  n = m ? m = o ? n + m = m + o.
Proof.
  (* FILL IN HERE *) Admitted.
Run Code Online (Sandbox Code Playgroud)

我在Idris中翻译成以下问题:

plusIdExercise : (n : Nat) ->
                 (m : Nat) ->
                 (o : Nat) ->
                 (n == m) = True ->
                 (m == o) = True ->
                 (n + m == m + o) = True
Run Code Online (Sandbox Code Playgroud)

我正在尝试逐个案例分析,我遇到了很多问题.第一种情况:

plusIdExercise Z Z Z n_eq_m n_eq_o …
Run Code Online (Sandbox Code Playgroud)

proof idris

2
推荐指数
1
解决办法
101
查看次数