没有实例(Num(可能大小))

时间:2011-11-17 19:11:07

标签: haskell types

我正在编译一个我正在构建的Yesod站点,以确保在出现此编译器错误时一切正常:

Foundation.hs:164:15:
    No instance for (Num (Maybe Size))
      arising from the literal `140'
    Possible fix: add an instance declaration for (Num (Maybe Size))
    In the `gSize' field of a record
    In the expression:
      GravatarOptions
        {gSize = 140, gDefault = Identicon, gForceDefault = False,
         gRating = PG}
    In an equation for `gs':
        gs
          = GravatarOptions
              {gSize = 140, gDefault = Identicon, gForceDefault = False,
               gRating = PG}

在阅读了haddock文档后,我知道gSize采用了Maybe Size,并且该Size定义为:

newtype Size = Size Int

如果这对任何问题都有帮助。

import Yesod.Goodies.Gravatar
import Data.Text

gravatar :: Text -> Text
gravatar email =
  gravatarImg email gs
  where
    gs = GravatarOptions {
      gSize = 140
      , gDefault = Identicon
      , gForceDefault = False
      , gRating = PG
      }

我不确定从哪里开始寻找解决方案,有人可以指出我正确的方向吗?感谢您的时间和考虑。

2 个答案:

答案 0 :(得分:5)

如果gSizeMaybe Size,那么您需要使用Maybe个构造函数之一 - 您可以使用Nothing表示无值,也可以使用Just x值。在您的代码段中,它应为Just (Size 140),如

gs = GravatarOptions {
  gSize = Just (Size 140)
  , gDefault = Identicon
  , gForceDefault = False
  , gRating = PG
  }

答案 1 :(得分:0)

它表示无法将(通过Num类)“140”转换为Maybe Size。您应该使用gSize = Just (Size 140)我猜