fromEnum 到Enum 实例?

2024-04-15

data Suit = Spade | Heart | Club | Diamond deriving (Eq, Ord, Enum, Show)

data Pip = Ace | Two | Three | Four | Five | Six | Seven | Eight | Nine    | Ten | Jack | Queen | King deriving (Eq, Ord, Enum, Show)

data Card = Card
       {suit :: Suit
       ,pip :: Pip
       } deriving (Eq,Ord, Show)

type Deck = [Card]

data EOBoard = EOBoard
         {foundations :: [Deck]
         ,columns     :: [Deck]
         ,reserve    :: [Deck]
         } deriving (Eq, Ord, Show)

instance Enum Card where

这是一个单人纸牌数据结构 我怎样才能使Card可枚举,与Enum实例来自Card{suit = Spade, pip = Ace}, Card{suit = Spade, pip = Two} .. Card{suit = Heart, pip = Ace}.. Card{suit = Club, pip = Ace} .. Card{suit = Diamond, pip = Ace} ..Card{suit = Diamond, pip = King}.


这是我的做法(基本上是@epsilonhalbe的想法):

data Suit
   = Spade | Heart | Club | Diamond
   deriving (Eq, Ord, Enum, Show, Bounded)

data Pip
   = Ace | Two | Three | Four | Five | Six | Seven | Eight | Nine
   | Ten | Jack | Queen | King
   deriving (Eq, Ord, Enum, Show, Bounded)

data Card = Card
     { suit :: Suit
     , pip :: Pip
     } deriving (Eq,Ord, Show, Bounded)

instance Enum Card where
  toEnum i =
    let (d,m) = i `divMod` (fromEnum (maxBound :: Pip) + 1)
    in Card (toEnum d) (toEnum m)
  fromEnum (Card s p) = fromEnum s * (fromEnum (maxBound :: Pip) + 1) + fromEnum p

这给你:

λ> take 5 $ [minBound .. maxBound] :: [Card]
[Card {suit = Spade, pip = Ace},Card {suit = Spade, pip = Two},Card {suit = Spade, pip = Three},Card {suit = Spade, pip = Four},Card {suit = Spade, pip = Five}]

PS:现在你应该得到所有 - 抱歉我搞砸了maxBound忘记了一个额外的

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

fromEnum 到Enum 实例? 的相关文章

  • 在 Windows 上使用堆栈安装 SDL2 for Haskell

    我正在尝试将 SDL2 与堆栈一起使用 我跟着这些说明 https www reddit com r haskellgamedev comments 4jpthu windows sdl2 is now almost painless vi
  • 在 Haskell 中将 Maybe Int 转换为 Int

    我正在编写以下代码 并希望找到框字符串中数字的索引 所以我用了findIndex但它返回Maybe Int值 而我只想要Int value 我怎样才能转换Maybe Int to Int值或者有什么方法可以提取Int from Maybe
  • Haskell:Where 与 Let

    我是 Haskell 的新手 我很困惑Where vs Let 它们似乎都提供了相似的目的 我读过一些比较Where vs Let但我很难辨别何时使用它们 有人可以提供一些背景信息或者一些示例来说明何时使用其中一种而不是另一种吗 哪里与让
  • Accelerate 和 Repa 是否有不同的用例?

    我一直在玩 Repa 和 Accelerate 它们都很有趣 但我不知道何时使用其中一个 何时使用另一个 他们是一起成长 是竞争对手 还是只是为了解决不同的问题 Repa 是一个用于高效数组构建和遍历的库 用 Haskell 编程并在 Ha
  • 是否可以列出派生 Generic 的记录数据类型中字段的名称和类型?

    我知道对于派生 Data Data 的数据类型 constrFields http hackage haskell org package base 4 7 0 2 docs Data Data html v constrFields给出字
  • 使用 cabal new-install 重新安装相同版本的软件包

    我正在开发 Haskell 包 我还没有上传到Hackage 版本号是0 1 0 0 我正在使用新风格的 Cabal 命令 为了在我处理包的同时测试它 使库可用于测试项目 我运行cabal new install lib构建包后 然而 我注
  • 函数式编程是否需要新的命名约定?

    我最近开始使用 Haskell 学习函数式编程 并在 Haskell 官方 wiki 上发现了这篇文章 如何阅读哈斯克尔 http www haskell org haskellwiki How to read Haskell What t
  • 显示未定义的实例

    可以采取任何措施来为未定义的值定义 Show 实例吗 也许存在一些 GHC 扩展 我想要这样的东西 gt print 1 undefined 1 undefined 根据Haskell 2010 报告 第 9 章 http www hask
  • 访问函数中的环境

    In main我可以读取我的配置文件 并将其提供为runReader somefunc myEnv正好 但somefunc不需要访问myEnv读者提供 链中的下一对也没有提供 需要 myEnv 中某些内容的函数是一个微小的叶函数 如何在不将
  • 使用 nix 在 Mac OS X 上由于“架构 x86_64 的未定义符号”而导致“堆栈构建”失败

    首先是错误消息 stack build Linking Users yuzhao stack setup exe cache x86 64 osx tmp Cabal simple mPHDZzAJ 2 2 0 1 ghc 8 4 4 cl
  • Haskell 中的前提条件检查有哪些选项

    这是一个简单的问题 我认为答案很复杂 一个非常常见的编程问题是函数返回某些内容 或者前置条件检查失败 在Java中 我会使用一些抛出异常的断言函数IllegalArgumentException在方法的开头 如下所示 method body
  • 如何为强制长度为 2^n 的向量类型定义可用的 Applicative 实例

    对于某些应用程序 我需要长度为 2 n 的向量 为了强制某些操作的长度匹配 我使用 ist 应用实例定义了我的类型 如下所示 LANGUAGE GADTs DataKinds FlexibleInstances FlexibleContex
  • 如何从 haskell 中的 IOError 获取 errno?

    我在 haskell 平台上 GHC 6 12 1 作为 apt get 安装在 Debian Squeeze 上 鉴于我需要在与最初引发它的线程不同的线程上使用它 如何从 IOError 中获取底层 errno 我需要这个的原因是因为我正
  • 将两个 Int 值相除以获得 Float 的正确方法是什么?

    我想分两份IntHaskell 中的值并获得结果Float 我尝试这样做 foo Int gt Int gt Float foo a b fromRational a b 但 GHC 版本 6 12 1 告诉我 无法将预期类型 Intege
  • 如何在 Haskell 中漂亮地打印表格?

    我想在 Haskell 中漂亮地打印一个类似表格的数据结构 列列表 例如 Table StrCol strings a bc c IntCol ints 1 30 2 DblCol doubles 2 0 4 5 3 2 应该渲染类似 st
  • 标准的能力

    我发现了一些使用标准的旧例子here http www serpentine com blog 2009 09 29 criterion a new benchmarking library for haskell 看起来好像早在 2009
  • 简单 Haskell Monad - 随机数

    我正在尝试扩展代码这个帖子 https stackoverflow com questions 3944170 haskell and state 接受的答案 允许我能够基于以种子作为参数的函数 randomGen 调用 randomGen
  • 如何在haskell中获取变量名称

    我来到 haskell 时有一些 c 背景知识 想知道是否有类似的 define print a printf s d n a a int a 5 print a 应该打印 a 5 这是 augustss 提到的 TH 解决方案 LANGU
  • 你能识别 Haskell 程序中的无限列表吗? [复制]

    这个问题在这里已经有答案了 可能的重复 如何判断列表是否是无限的 https stackoverflow com questions 7371730 how to tell if a list is infinite 在Haskell中 你
  • 找不到模块“Yesod”

    我有以下代码 LANGUAGE TypeFamilies QuasiQuotes MultiParamTypeClasses TemplateHaskell OverloadedStrings module Simple where imp

随机推荐

  • post方法的问题(使用fetch和express)

    我是一个非常初学者 所以我希望我的问题不是那么愚蠢 我想要做的是将经度和纬度从客户端 JavaScript 传递到服务器端的 Node js 中 我正在使用 fetch 和express js 下面是我的 html 代码 latitude
  • 如何为 PMD Xpath 规则设置嵌套条件

    我的规则要求我仅将它们应用于名称中不包含 get 的方法 换句话说 我的规则只需要应用于类中的非 getter 方法 我知道要掌握所有非 getter 方法 我可以使用 MethodDeclarator not contains Image
  • 步数计数器不会重置步数

    我可以使用以下命令开始和停止记录步骤Sensor TYPE STEP COUNTER通过注册和取消注册侦听器 但是 通过传递给我的应用程序的实际值SensorEvent当应用程序被销毁时 对象不会重置为零 如果我关闭应用程序并重新启动它 或
  • Javascript `this` 对象 == 成员函数中的 `window`

    在我的一些 Javascript 对象中 我发现我的this指针是正确的 这些是new Func type 对象 创建时 但在分配的方法中可能是错误的 function Confused console log checking this
  • 未找到 Emacs shell 命令

    我在 Mac OS X 10 5 8 上工作 我正在努力学习emacs 我对它很陌生 今天尝试从 emacs 中输入 shell 命令 我进入了pdflatex filename 但是 它给了我一个错误说 bin bash pdflatex
  • django 查询所有相关集的过滤?

    class Customer models Model name models CharField max length 200 class CustomerTicket models Model customer models OneTo
  • NSFetchedResultsChangeDelete 未被触发

    以前有人遇到过这个吗 当我选择从 tableView 由 FRC 填充 中删除一行时 应用程序不会崩溃或挂起 它没有任何作用 删除按钮保持选中状态 如果我单击模拟器上的其他位置 删除按钮将取消选择并消失 但单元格永远不会从 UI 中删除 我
  • libTogl 未定义的引用

    我正在尝试安装 netgen 从源代码构建 因此需要 Togl 我通过以下方式安装了它 sudo apt get install libtogl1 libtogl dev 当输入 make 时 我收到以下错误消息 usr lib gcc x
  • #ifdef 与 #if - 作为启用/禁用特定代码部分编译的方法,哪种更好/更安全?

    这可能是一个风格问题 但我们的开发团队存在一些分歧 我想知道是否还有其他人对此事有任何想法 基本上 我们有一些调试打印语句 我们在正常开发期间将其关闭 我个人更喜欢执行以下操作 SomeSourceFile cpp define DEBUG
  • Azure Web 应用程序、PHP 7.4、OCI8(Oracle 即时客户端 12.2.0.1.0)

    我们正在尝试将现有的 PHP 7 4 应用程序从 Windows Server 2012 上运行的内部服务器提升到 Azure Web 应用程序 PHP 应用程序使用 OCI8 连接到 Oracle 数据库 在不启用 OCI8 扩展的情况下
  • 使用 Oracle PL/SQL 存储过程授予其他用户表的权限

    我遇到了执行以下操作的应用程序的问题 PL SQL 包 A 包含应用程序的所有函数 过程 A 由 USER A 拥有 A 在 Oracle 中创建用户帐户 并在这些用户下创建表 A 还必须能够 TRUNCATE INSERT 到用户的表 注
  • 返回 dynamodb 中具有最大排序键的项目

    我正在使用 python 脚本访问 AWS 中的 dynamodb 数据库 我有一个带有哈希键和排序键的表 对于给定的哈希键 我想找到具有小于某个值的最大排序键的项目 我怎样才能做到这一点 或者 有没有办法从给定的键查找前一项 I am n
  • 撇号和 SQL Server FT 搜索

    我在 SQL Server 2005 中设置了 FT 搜索 但我似乎找不到将 Lias 关键字与 Lia s 记录相匹配的方法 我基本上想要的是允许人们在没有撇号的情况下进行搜索 我已经断断续续地解决这个问题有一段时间了 所以任何帮助都将是
  • NSDictionary 中的键和值是有序的吗?

    我的意思是 NSDictionary 中键和值的顺序是否始终与初始化 NSDictionary 时指定的顺序相同 或者如果我真的需要知道键的顺序 我应该更好地维护一个单独的 NSArray 吗 不 他们没有被订购 只要您不从字典中添加或删除
  • Android - 从网络下载图像,保存到应用程序私有位置的内存中,显示列表项

    我想做的是 我希望我的应用程序从互联网下载图像并将其保存到手机内存中应用程序私有的位置 如果列表项没有可用的图像 即无法在 Internet 上找到 我希望显示默认的占位符图像 这是我在 list item row xml 文件中定义为默认
  • Epsilon(ε) 产生式以及 LR(0) 语法和 LL(1) 语法

    在很多地方 例如在这个答案中here https stackoverflow com a 8496838 7571421 我看到有人说 LR 0 语法不能包含 产生式 Also in 维基百科 https en wikipedia org
  • “休息2”是什么意思?

    我总是使用和看到只带有 break 的例子 这是什么意思
  • Laravel Mix 未将vendor.js 转译为es5

    Laravel Mix 似乎没有将vendor js 和manifest js 转译为ES5 它在 iPhone Safari 和 IE 11 上失败 IE DevTools 显示以下错误 而且看起来它仍然具有 ES6 的特性 其他文件似乎
  • C# InputSimulator 包装器 - 如何使用它?

    我想模拟外部程序的键盘点击 我尝试过SendMessage PostMessage SendKeys 但它们不会将密钥发送到某个特定程序 所以我想尝试 SendInput 并且我已经下载了一个很好的包装器发送输入 http msdn mic
  • fromEnum 到Enum 实例?

    data Suit Spade Heart Club Diamond deriving Eq Ord Enum Show data Pip Ace Two Three Four Five Six Seven Eight Nine Ten J