首页 > 解决方案 > 如何从 Haskell 的 SDL 绑定中的 RenderConfig 中提取值

问题描述

这可能是初学者的错误,因为这是我第一次“真正”尝试使用 Haskell。

我的相关代码片段如下所示:

import           SDL            (RendererConfig, RendererType(SoftwareRenderer), defaultRenderer)

defaultRendererType :: RendererType
defaultRendererType = case defaultRenderer of
  RendererConfig rt  _ -> rt

值得注意的是, ghc 并没有抱怨 的导入RendererConfig,这让我觉得我用错了。

看起来它的来源RendererConfig只有两个参数,所以我不确定为什么匹配在 case 表达式中不起作用。

data RendererConfig = RendererConfig
  { rendererType  :: RendererType
    -- ^ The renderer's acceleration mode
  , rendererTargetTexture :: Bool
    -- ^ The renderer supports rendering to texture
} deriving (Data, Eq, Generic, Ord, Read, Show, Typeable)

编辑

我得到的错误信息:

Main.hs:47:3: error:                                                                                   
    Not in scope: data constructor `RendererConfig'                                                                                     
    Perhaps you want to add `RendererConfig' to the import list                                                                         
    in the import of `SDL' (app/Main.hs:10:1-97).                                                                                       
   |                                                                                                                                    
47 |   RendererConfig rt  _ -> rt                                                                                                       
   |   ^^^^^^^^^^^^^^     

标签: haskellhaskell-sdl

解决方案


有人向我指出RendererConfig 没有导出的构造函数。但是,由于它确实派生Show,因此在正确导入后,我仍然可以得到我想要的,而且更简单rendererType(defaultRenderer)


推荐阅读