gpt4 book ai didi

haskell - 如何保持 Haskell 的强类型输入灵活?

转载 作者:行者123 更新时间:2023-12-03 15:00:08 24 4
gpt4 key购买 nike

我一直在用 Haskell 编写不断增长的代码库。我的问题是我已经根据 GHCI 告诉我的函数添加了类型签名。

现在的问题是我的代码库在不断增长,一旦我改变了一个东西,我的代码就会到处乱跑,我忙于追踪所有的问题。

通过在 ghci 中加载模块导出的类型是否过于具体?我如何决定在我的签名中使用哪些类型或类型类以利用强类型的力量并具有一定的灵 active ? (即不花一个小时传播小改动?)。

最佳答案

The problem is now that I have a growing codebase, as soon as I change one thing, my code breaks all over the place and I am consumed with tracking down all of the problems.



这实际上被宣传为 Yesod(一个 Haskell Web 框架)中的一个特性。假设我指定了以下路由规范:
/blog/#String         BlogR   GET

我决定我想把它改成
/blog/#Date/#String   BlogR   GET

一旦我对路由进行了更改,编译器就会到处告诉我我已经破坏了我的代码。我将被迫更新 getBlogR函数 - 更改其输入类型,使其也接受 Date .我还将被迫更新我在模板中使用类型安全 URL 的任何地方,这看起来像 @{BlogR (slug p)} -> @{BlogR (date p) (slug p)} .

这被认为是一件好事,因为类型检查器正在帮助您发现由您所做的更改引入的问题。

现在,关于 ghci。
ghci> let shew = show
ghci> :t shew
shew :: () -> String
ghci> :t show
show :: Show a => a -> String

有时,ghci 会选择令人讨厌的默认值。然而,这种情况可以得到缓解。
ghci> :set -XNoMonomorphismRestriction
ghci> let shew = show
ghci> :t shew
shew :: Show a => a -> String

虽然使用 ghci 来发现函数的类型对初学者来说非常有用,但我不建议依赖 ghci。了解类型签名的含义,以及如何自己发现它们。实际上,首先编写您希望它具有的类型签名来开始编写函数。学习这项技能只需要花费很少的时间,而且当您可以使用 Haskell 的类型系统来发挥自己的优势时,这对编程来说是一个巨大的福音。

关于haskell - 如何保持 Haskell 的强类型输入灵活?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9223509/

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