不太严格的类型语言选项

时间:2014-01-06 00:29:20

标签: haskell types ghc

我在Haskell中有一个函数:

import qualified Codec.Picture as Juicy

--juicyLoad :: FilePath -> IO (Vector Word8)
juicyLoad file = do
    image <- Juicy.readPng file

    case image of
        Left err -> undefined
        Right (Juicy.ImageRGB8 (Juicy.Image w h dat)) ->
            return dat

GHC将类型推断为FilePath -> IO (Vector Word8),这就是我想要的。当我在源文件(juicyLoad :: FilePath -> IO (Vector Word8))中实际定义它时,会出现错误:Couldn't match expected type 'Vector Word8' with actual type 'Vector(PixelBaseComponent PixelRGB8'.

这似乎是{-# LANGUAGE x #-}选项的工作,我只是不知道哪一个

2 个答案:

答案 0 :(得分:4)

Vector有几种不同的版本。我能够通过明确导入由GHC推断出的相同内容来解决这个问题。

import qualified Codec.Picture as Juicy
import Data.Vector.Storable
import GHC.Word

并声明这样的类型:

juicyLoad :: FilePath -> IO (Vector Word8)

答案 1 :(得分:3)

问题是我导入了Vector类型。我导入的是Data.Vector,正确的导入是Data.Vector.Storable