Haskell:makeLenses - 数据构造函数不在范围内

Posted

技术标签:

【中文标题】Haskell:makeLenses - 数据构造函数不在范围内【英文标题】:Haskell: makeLenses - data constructor not in scope 【发布时间】:2017-12-10 18:25:38 【问题描述】:

我这里有这个简单的代码来定义一个类型并使用makeLenses 来生成镜头。

module Api.Jira.Types.Search
  (
    SearchRequest(..)
  ) where

import GHC.Generics
import qualified Data.Text as T
import Data.Aeson (FromJSON, ToJSON)
import Control.Lens
import Data.Aeson
import Data.Aeson.Types

data SearchRequest = SearchRequest
   _jql :: T.Text
  , _startAt :: Maybe Int
  , _maxResults :: Maybe Int
  , _fields :: Maybe [T.Text]
  , _expand :: Maybe [T.Text]
  , _properties :: Maybe [T.Text]
   deriving (Show, Generic)

instance ToJSON SearchRequest where
  toJSON = genericToJSON defaultOptions 
             fieldLabelModifier = drop 1 

instance FromJSON SearchRequest where
  parseJSON = genericParseJSON defaultOptions 
                fieldLabelModifier = drop 1 

makeLenses SearchRequest''

这会导致错误:

数据构造函数不在范围内: 搜索请求'' :: template-haskell-2.11.1.0:Language.Haskell.TH.Syntax.Name • 也许您的意思是其中之一: ‘SearchRequest’(第 20 行),变量‘searchRequest’(第 39 行)

我在 SO 上发现了两个有点相关的问题,但它们与声明顺序有关,似乎不适用于这里,因为 SearchRequest 中包含的所有类型都已定义。

Haskell: Template Haskell and the scope Type synonyms "not in scope" when using Template Haskell

任何想法是什么原因造成的?

【问题讨论】:

【参考方案1】:

这是''SearchRequest,而不是SearchRequest''

【讨论】:

哈哈哎哟。嗯,不好意思……感谢您的快速响应,一旦时间限制到期我会接受。

以上是关于Haskell:makeLenses - 数据构造函数不在范围内的主要内容,如果未能解决你的问题,请参考以下文章

重新格式化 Haskell 数据构造函数类型程序并重新格式化

此 Haskell 示例中数据构造函数中“Pt”的含义

Haskell - 简单的构造函数比较(?)函数

在 Haskell 中将字符串转换为类型构造函数

seq如何评估Haskell中的无限列表?

为啥 Haskell 中有“数据”和“新类型”? [复制]