主要观点:GHC 9.8 起可创建从 JS 到 Haskell 代码的回调,能创建全功能浏览器应用,文中展示如何将 JS 后端与外部组件库结合使用。
关键信息:
- 仓库:https://github.com/Swordlash/...,使用 ghc 9.12.1(ghcup)
- 示例 1 展示了用 GHC 与 JS 交互创建按钮并计数点击次数,还介绍了用 google-closure-compiler 压缩代码
- 示例 2 展示了用 Google Material Components 库给按钮添加样式,遇到 google-closure-compiler 不识别导入的问题,通过创建 externs 文件解决,还介绍了用 swc-loader 替代 google-closure-compiler 进行打包和压缩
重要细节: - 在 GHC 中通过 foreign import 创建回调,可将 Haskell 级别的动作传递给 DOM 事件监听器
- google-closure-compiler 压缩代码时需传入两个输入文件,一个是生成的 all.js,一个是声明外部变量的 all.externs.js,且编译 recent emscripten 时需添加 --language_in UNSTABLE
- 使用 Material Components 库给按钮添加样式时,需创建特定的 HTML 结构,导入相关模块和样式,销毁元素时要调用 destroy 方法
- 用 swc-loader 替代 google-closure-compiler 时,需在 webpack 文件中添加相应的 loader 和配置,且 swc-loader 能提供自己的 minifier 管道
- 后续工作包括添加新的 cabal 字段 js-options 以实现条件编译,添加多行字符串支持到 inline foreign imports,与 npm 进行集成等,作者将继续维护和开发相关库
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。