小编chr*_*tic的帖子

如何通过Haskell中的列表理解正确生成String列表?

我需要使用列表理解来生成这样的列表:[“ AaBB”,“ AbBB”,“ AcBB”,​​“ AdBB”,“ AeBB”,“ AfBB”,“ AgBB”]。但是我一直在创建表达式来解决这个问题

我尝试创建一个列表,其中每个元素都是字符串连接,类似“ A” + x +“ BB”,其中x是从“ a”开始到“ g”结束的一系列字母中的元素

module C where
    genList :: [String]
    genList = [ "A" ++ x ++ "BB" | x <- ["a" .. "g"]] 
Run Code Online (Sandbox Code Playgroud)

因此,我期望生成一个与问题中所要求清单相似的清单。但是相反,我只是遇到了此编译错误:

Prelude> :l exC
[1 of 1] Compiling C                ( exC.hs, interpreted )

exC.hs:3:41: error:
    • No instance for (Enum [Char])
        arising from the arithmetic sequence ‘"a" .. "g"’
    • In the expression: ["a" .. "g"]
      In a stmt of a list comprehension: x …
Run Code Online (Sandbox Code Playgroud)

string haskell list char

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

在Haskell中学习“:?:”运算符的含义

我正在学习Haskell,我刚在书中看到了这个奇怪的数据结构,看起来像这样:data ListaOrd a = a :?: (ListaOrd a) | Nulo deriving Show。据说这应该代表一个有序列表,但是我认为我并不真正理解它。我的问题是,该代码中“:?:”符号的含义是什么?

haskell parametric-polymorphism type-constructor

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

学习如何在预期的时间(a-&gt;也许b)而不是(a-&gt; b)作为第一个参数(Haskell)使用contramap

我正在研究Haskell,并被要求解决此练习:

实现一个名为NovoPred的新数据类型,该数据类型应具有一个具有相同名称的值构造函数。它还应该有一个名为runNovoPred的字段,其类型可能是-> Bool然后,为NovoPred类型创建一个Functor Contravariant实例

为了解决此问题,我提出了以下解决方案:

module Oitavo where

import           Data.Functor.Contravariant

newtype NovoPred a =
  NovoPred
    { runNovoPred :: Maybe a -> Bool
    }

instance Contravariant NovoPred where
    contramap y (NovoPred x) = NovoPred (x . y)
Run Code Online (Sandbox Code Playgroud)

您可能会注意到,该解决方案根本不起作用。Contramap需要具有以下结构:(a -> b) -> f b -> f a问题是x函数希望接收一个看起来像的值,Maybe b并且实际上正在接收一个值,b因为那是y函数返回的值。因此,这是不可能的x . y,因为x期望接收到的值与y实际返回的值不匹配。

因此,我认为我需要一种使y函数返回type值的方法Maybe b。不幸的是,我对如何执行此操作contramap一无所知,因为期望接收诸如a -> b第一个参数之类的东西而不是诸如此类a -> …

haskell functional-programming functor maybe contravariant

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