小编leh*_*ins的帖子

Haskell - 列表列表中的元素组合列表

假设我有一些列表列表,[[a, b], [c], [d, e, f], ...]其中列表中的列表可以是任意长度。我已经对列表进行了排序,使得最短的列表排在第一位,并且我想生成列表中所有元素组合的列表,以便我得到一个列表[[a, c, d, ...], [a, c, e, ...], [a, c, f, ...], [b, c, d, ...], ...],即通过更改从最后一个列表中选取的元素来生成组合首先,向上移动列表以更改类似于计数的元素。

使用这个列表,我将使用列表的头部来使用惰性求值,因为我只需要 1 个满足谓词的列表。如何生成列表?

haskell functional-programming list-comprehension combinatorics nested-lists

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

Haskell:文本文件上的quoteFile失败,Unicode字符上带有“无效字节序列”

quoteFile在虚拟环境中遇到问题(安装了GHC 7.8.4的Debian Wheezy)。我从描述了st准报价单的面向文件的版本Text.Shakespeare.Text

import Language.Haskell.TH.Quote    (QuasiQuoter, quoteFile)
import Text.Shakespeare.Text        (st)

sfFile :: QuasiQuoter
stFile = quoteFile st
Run Code Online (Sandbox Code Playgroud)

这在我的主机上工作得很好,但是,在我的虚拟环境(Docker映像)上失败并出现以下错误:

尝试运行编译时代码时发生异常:test-file.md:hGetContents:无效参数(无效字节序列)

代码:Language.Haskell.TH.Quote.quoteExp stFile“ test-file.md”

我的一点REPL调查表明,该错误发生在文本文件中的第一个unicode字符上,在我当前的情况下,这是'«'左指针双角引号:

import System.IO (IOMode(..), hGetContents, openFile, openBinaryFile, utf8)

main =
  do h <- openBinaryFile "test-file.md" ReadMode
     hGetContentContents h
     -- Binary read works fine out-of-box.

     h' <- openFile "test-file.md" ReadMode
     hSetEncoding h' utf8
     hGetContentContents h'
     -- This works only if encoding is explicitly set, otherwise 
     -- it gives "invalid byte sequence" error at …
Run Code Online (Sandbox Code Playgroud)

linux unicode encoding haskell utf-8

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

如果启用了 OverloadedStrings 扩展,则函数长度“a”不会编译

如果“ {-# LANGUAGE OverloadedStrings #-} ”包含在源文件的顶部或 package.yaml 中(我使用的是堆栈),则

length "a"  -- does not compile anymore.
Run Code Online (Sandbox Code Playgroud)

但是自定义功能length'工作正常

length' :: [a] -> Int 
length' xs = sum [1 | _ <- xs] 
Run Code Online (Sandbox Code Playgroud)

Data.String是进口的 - 我认为问题就在那里,但是,我有兴趣看看,如果有人有类似的问题。

堆栈和 GHC 版本:2.3.1 版,Git 修订版 x86_64 hpack-0.33.0,ghc-8.8.3

我正在使用 mac osx,但在 Linux 和 Windows 中也有同样的错误。

这是堆栈产生的错误:

/Users/admin1/Haskell/PROJECTS/orig1/src/Lib.hs:13:29: error:
    • Ambiguous type variables ‘t0’,
                               ‘a0’ arising from the literal ‘"a"’
      prevents the constraint ‘(IsString (t0 a0))’ from being solved.
      Probable fix: use a type annotation …
Run Code Online (Sandbox Code Playgroud)

haskell

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

Haskell HIP:将滤镜应用于图像

我正在尝试使用 Haskell 图像处理包HIP向图像添加过滤器,我能够使用ByteString包读取图像并使用 HIP 将图像转换为类型Image VS YCbCr Word8。现在,我如何从 转换Image VS YCbCr Word8Border (Pixel cs e)or Pixel cs e?我仍在学习 Haskell 所以请保持简单。请参阅下面的代码:

addFilterJpg :: FilePath -> IO ()
addFilterJpg fc = do
    case validPath fc of 
        Left err -> putStrLn err
        Right img -> do
            case readImage img of
                Left err -> putStrLn err
                Right img -> do
                  -- convert img::(Image VS YCbCr Word8) to Border (Pixel cs e)
                  -- apply …
Run Code Online (Sandbox Code Playgroud)

haskell image-processing hip

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

试图抽象出类型类,但类型变量转义

我有一些类和它们的实例。该示例显示了一些无意义的类。它们的确切性质并不重要。

{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE FlexibleInstances #-}


class Foo a where
   foo :: a -> Int
class Bar a where
   bar :: a -> String

instance Foo Int where
   foo x = x
instance Foo String where
   foo x = length x

instance Bar Int where
   bar x = show x
instance Bar String where
   bar x = x
Run Code Online (Sandbox Code Playgroud)

好的,现在我想创建一些存在类型,将这些类隐藏在某些数据类型外观后面,这样我就不必处理约束了。(我知道存在类型被认为是一种反模式,请不要向我解释这一点)。

data TFoo = forall a. Foo a => TFoo a …
Run Code Online (Sandbox Code Playgroud)

haskell types typeclass

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

哈斯克尔。我很困惑这个代码片段是如何工作的

magnitude :: Floating a => [a] -> a
magnitude = sqrt . mag
  where mag [] = 0
        mag (x:xs) = x^2 + mag xs
Run Code Online (Sandbox Code Playgroud)

这应该对列表中的每个元素进行平方,然后取它们的总和,然后取平方根。很公平,但是当它只将 x 添加到列表 xs 时,这个递归函数是如何工作的?

haskell

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

如何在 Haskell 中执行命令列表?

我是 Haskell 的新手,我一直在system为我执行 shell 命令,因为我只对退出状态感兴趣。我注意到,因为我可以做这样的事情:

ls <- system "ls"
pwd <- system "pwd"
Run Code Online (Sandbox Code Playgroud)

这正确地执行了两个命令。我正在考虑执行这些命令的数组,例如

lsAndPwd <- return $ system <$> ["ls", "pwd"]
Run Code Online (Sandbox Code Playgroud)

我很惊讶这实际上并没有执行任何操作。这会编译,我检查了lsAndPwd它的类型是否正确,[IO GHC.IO.Exception.ExitCode]但从未执行过命令。这是怎么回事,我怎样才能让它发挥作用?

haskell

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

我想检查比较运算符是true还是false

所以我知道如何编写代码来查看我的列表是从最小到最大排序

isSorted :: (Ord a) => [a] -> Bool
isSorted []       = True
isSorted [x]      = True
isSorted (x:y:xs) = x <= y && isSorted (y:xs)
Run Code Online (Sandbox Code Playgroud)

但我想编写一个代码,告诉我我的列表是否按给定的比较运算符排序,例如我想放入

sorted (<=) [1,2,2,4,5] == True
sorted (<)  [1,2,2,4,5] == False
sorted (==) [1,2,2,2,3] == False
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

sorting haskell

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

Haskell:为什么将变量的尾部重新分配给它自己的变量会出现问题?

假设您有一个包含以下列表的变量:

Prelude> arr = [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)

你也是,

Prelude> arr
[1,2,3,4,5]
Prelude> arr = tail arr
Prelude> arr

Run Code Online (Sandbox Code Playgroud)

为什么编译器现在冻结了?我试图在递归中实现这个代码语句,但这种现象阻止了我的递归正常工作——它不断返回一个空列表错误。

recursion haskell list freeze

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

了解数组函数定义:如何使[Word8]成为数组(整数,整数)Word8

所以我有一个函数,称为funcA

这是“定义”(我刚刚开始学习Haskell)。

funcA :: Quadtree -> Array (Int, Int) Word8
Run Code Online (Sandbox Code Playgroud)

一个示例是将其Quadtree作为工作解决方案并返回:

listArray ((0,0), (2,2)) [0,0,0,1,1,1,2,2,2]
Run Code Online (Sandbox Code Playgroud)

我目前正在返回[Word8]。我的问题是,是不是[0,0,0,1,1,1,2,2,2]一个[Word8],不是Word8?所以,我们的工作解决方案是形式Array (Int, Int) [Word8],对吗?它不遵循函数定义的返回格式吗?

[0,0,0,1,1,1,2,2,2]该如何选择a [Word8]并将其制成表格Array (Int, Int) Word8

arrays haskell

0
推荐指数
1
解决办法
57
查看次数