在where子句不起作用的地方键入孔

mb14

我有以下

readStatement :: String -> IO  [Transaction]
readStatement path = do
   csvData <- readFile path
   return $ catMaybes (map _ (splitOn "\r" csvData))

GHC找到以下类型的孔[Char] -> Maybe Transaction现在,如果我给这个孔取一个名字并移到where子句中

readStatement :: String -> IO  [Transaction]
readStatement path = do
   csvData <- readFile path
   return $ catMaybes (map process (splitOn "\r" csvData))
   where process = _ 

GHC找不到新行的类型,但给出了:

Found hole ‘_’ with type: t
Where: ‘t’ is a rigid type variable bound by
           the inferred type of process :: t at Statement.hs:63:11
Relevant bindings include
  process :: t (bound at Statement.hs:63:11)
  path :: String (bound at Statement.hs:60:15)
  readStatement :: String -> IO [Transaction]
    (bound at Statement.hs:60:1)
In the expression: _
In an equation for ‘process’: process = _
In an equation for ‘readStatement’:
    readStatement path
      = do { csvData <- readFile path;
             return $ catMaybes (map process (splitOn "\r" csvData)) }
      where
          process = _

该代码严格等效,因此类型推断为什么不会给出相同的结果?(我正在使用GHC 7.8.3)

开支

在下面的代码中

let x = something
in f x

类型推断x = something不考虑f也就是说,something推断的类型,x将其概括为多态类型,然后获取该类型。这可能会分配x比所需的类型更通用的类型f

更具体地说,在

let x = \y->y
in  x "hello"

我们推断出多态结合x :: forall a. a->a请注意,这String还没有出现。

我猜是在对let定义执行类型推断之后,GHC会在那时打印类型孔信息在发布的示例中,

do one
   two
where process = _

我们推断时_ :: t无需查看上下文并打印该类型。如果您想要更专业的(单态)类型,请尝试

(\process -> do
   one
   two
) _

在上面,我们不使用letwhere,因此仅推断单态类型。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

左联接与where子句不起作用

来自分类Dev

mysql where子句不起作用

来自分类Dev

SQL条件where子句不起作用

来自分类Dev

mysql where子句不起作用

来自分类Dev

“ in”子句中的“ where”条件不起作用

来自分类Dev

SQL where子句不起作用

来自分类Dev

where子句在mysql中不起作用

来自分类Dev

WHERE子句中的Datediff不起作用

来自分类Dev

SQL WHERE子句不起作用

来自分类Dev

查询WHERE IN子句不起作用

来自分类Dev

Codeigniter Where 子句不起作用

来自分类Dev

AS-在不起作用的地方

来自分类Dev

Where子句不起作用。拉拉韦尔

来自分类Dev

Rails渴望加载(包括),where子句不起作用?

来自分类Dev

Rails where子句之间在MySQL中不起作用

来自分类Dev

Linq to SQL isull in where子句不起作用

来自分类Dev

LINQ:如果WHERE子句中的IF条件不起作用

来自分类Dev

laravel 4 updateExistingPivot与where子句不起作用

来自分类Dev

where子句中的案例声明不起作用

来自分类Dev

带有--where子句的mysqldump不起作用

来自分类Dev

解析,使用Where子句运行Push Job不起作用

来自分类Dev

为什么where子句在熊猫中不起作用?

来自分类Dev

Oracle SQL where子句在某些日期不起作用

来自分类Dev

Sysdate where子句在Oracle SQL中不起作用

来自分类Dev

IS NULL在SQL的WHERE子句中不起作用

来自分类Dev

mysql WHERE子句包含多个值的变量-不起作用

来自分类Dev

WHERE子句似乎在PHP中不起作用

来自分类Dev

mongo上的array的where子句不起作用

来自分类Dev

为什么我的AND或WHERE子句不起作用?