小编ДМИ*_*КОВ的帖子

spanM,在Haskell中使用TakeMhileM

我有以下问题:给出一个[String]和String->IO Int.所以我可以进行转换(地图)并获得[IO Int].现在,我必须做两件事 - 从行动起,直到结果是积极的,我需要知道,所有列表都被处理了.在第一次非正面结果后我被禁止处理.

takeWhileM不回答第二个问题(长度比较太不切实际),并且spanM禁止执行IO.

当然,我自己也可以编写递归函数,但我希望以Haskell的方式完成它,具有所有优良的高阶函数.

建议?可能完全使用另一种方法?上面的任务是我的项目中的一个简单任务.

monads haskell higher-order-functions

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

为什么我不能在Haskell中将查找结果与Nothing进行比较?

我有以下代码:

import System.Environment
import System.Directory
import System.IO
import Data.List

dispatch :: [(String, [String] -> IO ())]
dispatch =  [ ("add", add)
            , ("view", view)
            , ("remove", remove)
            , ("bump", bump)
            ]

main = do
    (command:args) <- getArgs
    let result = lookup command dispatch
    if result == Nothing then
        errorExit
    else do
        let (Just action) = result
        action args

errorExit :: IO ()
errorExit = do
    putStrLn "Incorrect command"

add :: [String] -> IO ()
add [fileName, todoItem] = appendFile fileName …
Run Code Online (Sandbox Code Playgroud)

haskell

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

定义xml的相等性

有没有办法在Xml语句上定义相等,这三个是相同的(忽略空格,参数和标签顺序)?

1:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com</groupId>
  <url>http://maven.apache.org</url>
</project>
Run Code Online (Sandbox Code Playgroud)

2:

<project>
  <modelVersion>4.0.0</modelVersion>
  <url>http://maven.apache.org</url>
  <groupId>com</groupId>
</project>
Run Code Online (Sandbox Code Playgroud)

3:

<project>
    <modelVersion>4.0.0</modelVersion>
    <url>http://maven.apache.org</url>
    <groupId>com</groupId>
</project>
Run Code Online (Sandbox Code Playgroud)

例如,xml没有帮助,因为没有Eq实例Content.

此外,xml-conduit也不可用,因为Element包含所有节点元素List.它对空白也很敏感.

有许多图书馆一起工作xml,包括HXT但很难找到有用的东西.

xml haskell

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

如何通过手册页解析以快速查找有关程序选项("-I")的信息?

我正在尝试构建freeglut,我只想调试一个bash脚本选项,我需要找出具体-I和-Lgcc编译器选项的功能.我不应该经历10,000条令人讨厌的文字.

我刚刚尝试了以下内容

man gcc | cat > gcc.txt
grep "-I" gcc.txt
Run Code Online (Sandbox Code Playgroud)

linux

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

win32 SetForegroundWindow在haskell

我注意到Haskell Win32 api没有SetForegroundWindow函数,我在haskell中不够熟练,我自己添加了这个功能.有没有办法使用haskell复制这个或者有没有人使用ffi制作自己的包装器?

windows haskell

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

为什么这些实例不会产生重叠实例错误

让我们定义一个collapse坍塌的任何可能嵌套函数Maybe (Maybe (... a)...)来Maybe a:

{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE IncoherentInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE NoOverlappingInstances #-}
{-# LANGUAGE TypeFamilies #-}

module MaybeCollapsable where

class M a b where
  collapse :: Maybe a -> Maybe b

instance (a ~ b) => M a b where
  collapse = id

instance M a b => M (Maybe a) b where
  collapse Nothing = Nothing
  collapse (Just a) = collapse a
Run Code Online (Sandbox Code Playgroud)

它运作良好

> …
Run Code Online (Sandbox Code Playgroud)

haskell

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

在F#中构建具有Applicative功能的记录

假设有一个type r = {A : int; B : string; C : int; D : string}和一些值:

let aOptional : int option = ...
let bOptional : string option = ...
let cOptional : int option = ...
let dOptional : string option = ...
Run Code Online (Sandbox Code Playgroud)

如何r optional从他们的eleganlty(没有嵌套的案件等)构建?


顺便说一下,这是如何在haskell中完成的Control.Applicative:

data R = R { a :: Integer, b :: String, c :: Integer, d :: String}

R <$> aOptional <*> bOptional <*> cOptional <*> dOptional :: Maybe …
Run Code Online (Sandbox Code Playgroud)

f# haskell

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

具有刚性变量的数组

好吧,我正在做一个问题,我使用的函数有一个严格的变量.我有一个使用数组来解决这个问题的想法.所以我想到使用与我正在创建的函数具有相同刚性变量的数组,但我不知道如何使用刚性变量创建数组.我试过以下的东西,但没有效果:

rearrange ::  [Int] -> [a] -> [a]

rearrange l la = elems (f 1 posarr)    
  where
    b = length l
    listarr :: Array Int Int
    listarr = listArray (1,b) l
    arra :: Array Int  c
    arra = listArray (1,b) la
    posarr :: Array Int  c
    posarr = listArray (1,b) la
    f i posarr
      | (b < i) = posarr
      | otherwise = f (i+1) (posarr // [(listarr!i,arra!i)] )
Run Code Online (Sandbox Code Playgroud)

我得到的错误是严格的变量.有什么可能的解决方案?请给出如何使用刚性变量制作数组的想法,例如我使用的以下函数中的变量

arrays haskell

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

什么时候使用类型类?

通常当我创建函数时,我不知道在哪些函数中使用类型类(等等)更好Eq,Integral因为有时候不需要像以下那样使用它们:

factorial :: Int -> Int 
bla bla bla 
bla bla bla
Run Code Online (Sandbox Code Playgroud)

和

factorial :: (Integral a) => a -> a
bla bla bla
bla bla bla
Run Code Online (Sandbox Code Playgroud)

我相信第二个只是花时间和地点但是在elem函数中写入是很重要的Eq(下面elleme是elem)

elemme :: Eq a => a -> [a] -> Bool
y `elemme` [] = False
y `elemme` (x:xs) = if y == x then True else y `elemme` xs 
Run Code Online (Sandbox Code Playgroud)

请告诉我一些事情.谢谢.

haskell

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

替换haskell中列表列表中的元素

我想写一个这样的函数:

updateMatrix:: [[a]] -> a -> (x, y) ->[[a]]
Run Code Online (Sandbox Code Playgroud)

这应该包含一系列列表,例如:

[ [1, 2, 3, 4],
  [5, 6, 7, 8]]
Run Code Online (Sandbox Code Playgroud)

并将给定元素放在指定的坐标处,因此,给出:

[ [1, 2, 3, 4],
  [5, 6, 7, 8]] 9 (0, 1)
Run Code Online (Sandbox Code Playgroud)

它应该回来

[ [1, 9, 3, 4],
  [5, 6, 7, 8]]
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何在不重建整个矩阵的情况下做到这一点,请帮忙!

haskell list

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

标签 统计

haskell ×9

arrays ×1

f# ×1

higher-order-functions ×1

linux ×1

list ×1

monads ×1

windows ×1

xml ×1