新类型的一个覆盖如何显示?

2024-03-15

我想重写 Haskell 中的默认整数构造函数,以便它们生成字符串(主要是出于好奇,但暂时为 LaTeX 的 \frac{}{} 不便提供一个很好的输入替代方案)。

我希望能够使用语言本身,而不是特殊的解析器,但我想这可能行不通......

module Main where

import Prelude hiding ((+))

newtype A = A Int deriving (Eq, Show, Num)
default (A)

(+) :: A -> (A -> String)
(A a) + (A b) = (show a) ++ " + " ++ (show b)

main2 = 3+4

main :: IO ()
main = putStrLn main2

上面的问题是 + 函数仅适用于 (A, A) 而不是 (A, String) 等。如果简单地省略模式匹配“(A a)”并写入“a”,则show() 函数在前面加上“A”,因此“3”变成“A 3”而不仅仅是“3”。

我想覆盖A的Show,但似乎很头疼......


如果你想要自己的Show实例为A,那么就不要派生它并创建自己的实例:

newtype A = A Int deriving (Eq, Num)

instance Show A where
  show (A a) = show a

然后你可以写这样的东西:

(+) :: (Show a, Show b) => a -> b -> String
a + b = show a ++ " + " ++ show b

当然,如果你自己定义+像那样的运算符,那么我认为你的问题不需要newtype A宣言:

module Main where

import Prelude hiding ((+))

(+) :: (Show a, Show b) => a -> b -> String
a + b = show a ++ " + " ++ show b

aSum = 3 + 4

main :: IO ()
main = putStrLn aSum
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

新类型的一个覆盖如何显示? 的相关文章

  • runghc 和 runhaskell 之间有什么区别?

    RWH 突然开始使用 runhaskell 而不是 runghc 有什么不同 据我所知 它们的工作原理是一样的 runhaskell可以运行您系统上使用的任何 Haskell 解释器 它不一定是 GHCi 例如 runhaskell可以改为
  • Haskell 重叠/不连贯的实例

    我知道这段代码有点傻 但有人可以解释为什么吗isList 42 回报True然而isList2 42 prints False 以及如何防止这种情况发生 我想更好地理解一些更晦涩的 GHC 类型扩展 我认为这将是一个有趣的例子 LANGUA
  • 使用 haskell 构建动态库并从 C++ 中使用它

    我想构建一个包含 haskell 函数的动态库 我在 Linux 上工作 想从 C 代码中调用这个动态库 我用的例子是http wiki python org moin PythonVsHaskell http wiki python or
  • Haskell-Stack:构建期间出现访问冲突错误

    过去几天我一直在尝试使用堆栈构建我的 Haskell 项目 但遇到了访问冲突错误 据我了解 我有最新的堆栈版本和 GHC 这一切最初都是有效的 直到我将一个库添加到我的 cabal 文件中 我现在已经将其删除 但错误仍然出现 我也恢复到我的
  • 如何在函数式编程中为AST节点生成稳定的id?

    我想将一个特定的 AST 节点替换为另一个节点 并且这个替换的节点是由交互式用户输入指定的 在非函数式编程中 可以使用可变数据结构 并且每个AST节点都有一个对象引用 因此当我需要引用特定节点时 我可以使用这个引用 但在函数式编程中 使用I
  • “Alternative”中的模式匹配

    我有一个函数 它的参数进行模式匹配以生成计算StateT Maybe 可以这么说 此计算在运行时可能会失败 在这种情况下 我希望当前的模式匹配分支失败 我非常怀疑是否有可能有类似的东西 compute Int gt StateT Maybe
  • 为什么Data.Hashmap中没有mapKeys?

    我想使用诸如mapKeys to map仅限按键 即有一个功能mapKeys in Data Map 但没有类似物Data Hashmap 此外 在Data Hashmap我没有发现任何有关操作按键的信息 是否只有不完整之处Data Has
  • 不同种类的ReaderT?

    冒着成为一个XY问题 https en wikipedia org wiki XY problem 是否有可能有一个ReaderT与不同的环境 我正在尝试类似 type AppM perms ReaderT perms IO 但是编译器抱怨
  • 尝试以特殊行为渲染 Threepenny-gui 中的字段

    我想要做的是设置字段 当它们处于焦点时显示详细信息 而当它们不处于焦点时显示摘要 例如 A 当它失去焦点 变得模糊 时 我将值保存在 状态 映射中 然后将该值更改为旧值的函数 即汇总值 b 当它获得焦点时 我用我在地图中保存的旧值替换摘要值
  • 用户状态(秒差距)

    我正在使用秒差距解析一个表达式 并且我想使用秒差距中的用户状态来跟踪这些表达式中的变量 不幸的是我真的不知道该怎么做 给出以下代码 import Data Set as Set inp x y z data Var V String var
  • 仅使用 Hunit 在 Haskell 中创建并运行最小测试套件

    我对 Haskell 比较陌生 所以如果我的术语不太正确 请提前道歉 我想为一个非常简单的项目实现一些简单的单元测试 通过管理cabal 我注意到这个非常相似的问题 https stackoverflow com questions 118
  • Haskell - 无法将类型“PersistEntityBackend record0”与“SqlBackend”匹配

    我正在尝试通过 Yesod 中的 id 获取记录 我的代码是 getEditActorR Handler Html getEditActorR do actorId lt runInputGet ireq intField id actor
  • 有没有办法从 IO monad 中解开类型?

    我有这个非常简单的功能 import qualified Data ByteString Lazy as B getJson IO B ByteString getJson B readFile jsonFile readJFile IO
  • 运营商部分应用

    如果我想在字符末尾添加一个空格以返回列表 如果我不传递任何参数 我将如何通过部分应用程序来完成此操作 还有类型是 space Char gt Char 由于使用 和 运算符出现 解析错误 我在末尾添加空格时遇到问题 到目前为止我所拥有的是
  • 在 Haskell/Yampa 和 HOOD 中调试游戏对象的输出

    我一直坚持使用 Haskell Yampa Arrows with HOOD 为我的游戏对象生成调试输出 我的引擎基本上运行一系列游戏对象 这些对象产生输出状态 线 圆 然后进行渲染 data Output Circle Position2
  • XMonad 在不同工作区启动

    我想在 xmonad start 上启动不同工作区中的一些应用程序 这很重要 所以 我写了以下内容startupHook startupApps String startupApps konsole emacs firefox gvim k
  • 我需要什么类型签名才能将函数列表转换为 Haskell 代码? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么 haskell 中不允许这样的函数定义 https stackoverflow com questions 6168880 why is such a function definition
  • 寻找 jQuery 效果来逐渐显示隐藏的 DIV/图像

    可能我错过了一些明显的东西 但我无法弄清楚如何慢慢地显示隐藏的图像 DIV 以便它从上到下显示 如果你看一下这个 jsfiddle 你会看到我试图在 jQuery 中使用 show 来显示的图像 http jsfiddle net nick
  • 在 Windows 上使用堆栈安装 SDL2 for Haskell

    我正在尝试将 SDL2 与堆栈一起使用 我跟着这些说明 https www reddit com r haskellgamedev comments 4jpthu windows sdl2 is now almost painless vi
  • 是否可以列出派生 Generic 的记录数据类型中字段的名称和类型?

    我知道对于派生 Data Data 的数据类型 constrFields http hackage haskell org package base 4 7 0 2 docs Data Data html v constrFields给出字

随机推荐