gpt4 book ai didi

haskell - Haskell 中的非详尽模式匹配

转载 作者:行者123 更新时间:2023-12-03 03:49:44 25 4
gpt4 key购买 nike

我正在学习 Haskell,想编写一个简单的程序,只需将字符串中的每个字母重复两次。

我想出了这个:

repl :: String -> String
repl " " = " "
repl (x:xs) = x:x:repl xs

编译时,我没有收到任何警告,但在执行repl "abcd"时发生运行时错误:

"abcd*** Exception: repl.hs:(2,1)-(3,23): Non-exhaustive patterns in function repl

为什么编译器从不报告这一点,为什么它在 Haskell 中被忽略,而有许多语言(如 OCaml)在编译时清楚地报告了这一点?

最佳答案

默认情况下,模式匹配警告处于关闭状态。您可以使用 -fwarn-incomplete-patterns 打开它,也可以使用 -W-Wall 将其作为更大的警告包的一部分。

您可以从 ghci 执行此操作:

Prelude> :set -W

您还可以在编译时将标志传递给 ghc 或将其作为编译指示包含在模块顶部:

{-# OPTIONS_GHC -fwarn-incomplete-patterns #-}

对于您的特定程序,它应该给出以下警告:

/home/tjelvis/Documents/so/incomplete-patterns.hs:2:1: Warning:
Pattern match(es) are non-exhaustive
In an equation for ‘repl’: Patterns not matched: []

关于haskell - Haskell 中的非详尽模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31866379/

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