tetris类型-卡住的单子和纯代码混合

问题描述 投票:0回答:2

我正在尝试在haskell中实现点点的vulkan教程。

现在我暂时无法尝试从c:转换此代码:

for (const char* layerName : validationLayers) {
    bool layerFound = false;

    for (const auto& layerProperties : availableLayers) {
        if (strcmp(layerName, layerProperties.layerName) == 0) {
            layerFound = true;
            break;
        }
    }

    if (!layerFound) {
        return false;
    }
}

return true; 

到目前为止,我到此为止:

-- This has type (Int -> Text) -> Bool
let partOne = all (`elem` requiredValidationLayers) . flip map [0 .. realCount-1]
-- This has type Int -> IO Text
let partTwo i = do
        let layerProperty = advancePtr layerProperties i
        myField_ <- readStringField @"layerName" layerProperty
        pure $ toS myField_ :: IO Text

我感觉我在这里已经掌握了所有要素,但是我可能会朝着完全错误的方向前进。

我如何将这些东西放在一起?

谢谢

PS:好的,我只是注意到集合包含检查很可能被颠倒了-没关系,为了这个问题,让我们假装它确实很好]]

我正在尝试在haskell中实现vulkan教程的零碎片段。目前,我一直试图从c:转换此代码:for(const char * layerName:validationLayers){bool layerFound = ...

c haskell monads code-translation do-notation
2个回答
0
投票

我将从一些假设开始:


-1
投票
感谢所有评论者,我想我现在明白了:)
© www.soinside.com 2019 - 2024. All rights reserved.