gpt4 book ai didi

wpf - Haskell 中 MVC 框架的镜头

转载 作者:行者123 更新时间:2023-12-04 11:28:17 31 4
gpt4 key购买 nike

我一直在考虑如何在 WPF 或 AngularJS 的模型中在 Haskell 中构建 MVC 框架的想法,但似乎无法找到开始的关键类型或想法。所以不幸的是一个模糊的问题——还有其他人在考虑这个问题吗?

我看到了编辑镜头、多板和 Compos,但我认为它们都解决了略有不同的问题。

我对它如何工作的粗略草图是:

  • 将模型创建为普通的 haskell 数据结构
  • 创建一组“镜头”或命令来修改您的模型。
  • 编写一个由模型中的类型参数化的 HTML(或其他)模板。

  • .
    data Model = Page { _title :: String, _content :: [(Int, String)] }

    title :: Lens Model String
    content :: Int -> Lens Model (Maybe String)

    然后我希望能够编写一个函数:
    Model -> Template Model -> Html

    以及在应用镜头时更新部分 View 的功能。
    Lens Model a -> a -> HtmlTemplate Model -> [(Path, Html)]

    所以我想问题是 - 镜头将采用哪种类型,可以对一种数据结构进行操作,然后用于描述另一种数据结构的变化。

    一种可能性似乎是创建一个包含所有镜头的 GADT,然后在 GADT 类型上对 HTML 进行模板化,然后可以在每个步骤中使用该模板与模板进行匹配。例如
    data Lenses a b where
    Title :: Lens Model String -> Lenses Model String
    Item :: Lens Model String -> Lenses Model (Maybe String)

    然后是 Html 模板数据类型,例如
    data HtmlTemplate a = Text String 
    | Element String [Attrib a]
    | forall b. Binding (Lenses a b) (Html b)

    Binding 元素可以直接与其进行模式匹配。

    但这似乎几乎否定了这一点,因为模型然后在臀部与 View 相连。

    我想知道那里有没有人(比我聪明)考虑过这可能如何工作?或者即使这是个好主意?

    最佳答案

    我一直在使用 Haskell 中基于镜头的“MVC”构建一个大型商业应用程序。

  • 纯函数式数据结构
  • 用于设置和获取(并保持数据一致)的镜头
  • 用于生成与每个镜头相关的 View (模板)的 DSL。

  • 这是一次很棒的体验,我绝对推荐复杂结构的详细结构编辑方法。

    这种方法迫使你
  • 不是 hack,而是使用镜头作为内部模型的安全接口(interface)
  • 模型强分离->查看
  • 对所有内容进行类型检查——生成 View 代码的镜头类型

  • 有很多方法可以设计它,但我认为这是一种非常合理的设计方法。您需要对 GUI 部分提供良好的 DSL 支持。

    关于wpf - Haskell 中 MVC 框架的镜头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10338131/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com