- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读 the Rank-N-Types section of 24 days of GHC Extensions并遇到了以下 GADT:
{-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
import Data.Char
data Some :: * -> * where
SomeInt :: Int -> Some Int
SomeChar :: Char -> Some Char
Anything :: a -> Some a
unSome :: Some a -> a
unSome (SomeInt x) = x + 3
unSome (SomeChar c) = toLower c
unSome (Anything x) = x
unSome (someInt 2) -- 5
尽管 unSome
在其类型变量中是多态的,但我们可以向编译器证明,例如在 SomeInt
情况下,将给定值加三是安全的。作者将这种类型称为细化。
现在我很好奇我是否可以对 Scrott 编码类型做同样的事情。幸运的是,有一个这种编码的例子。我们只需要打开 Rank-N-Types 和 Type-Families 扩展:
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE RankNTypes #-}
newtype SomeC a =
SomeC {
runSomeC ::
forall r.
((a ~ Int) => Int -> r) ->
((a ~ Char) => Char -> r) ->
(a -> r) ->
r
}
但是,文章中没有提供unSome
。我不精通 Haskell,也不知道如何使用 Scott 编码实现此功能。尤其是类型相等约束(例如 (a ~ Int) =>
)让我感到困惑。
感谢您提供有关其他在线资源的任何帮助或信息。
最佳答案
您只需使用提供的函数来替换您的模式匹配,如:
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE RankNTypes #-}
import Data.Char
newtype SomeC a =
SomeC {
runSomeC ::
forall r.
((a ~ Int) => Int -> r) ->
((a ~ Char) => Char -> r) ->
(a -> r) ->
r
}
unSome :: SomeC a -> a
unSome (SomeC f) = f (\x -> x+3) (\c -> toLower c) (\x -> x)
在 ghci 中:
> unSome (SomeC (\someInt someChar anything -> someInt 2))
5
关于haskell - 如何从具有类型相等约束的 Scott 编码的 GADT 中获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46304713/
运行cmd sqlplus/nolog 回车 SQL>conn/as sysdba 回车 SQL>alter user scott account unlock; 回车 SQL&
ADT 可以使用 Scott 编码来表示,将乘积替换为元组,将求和替换为匹配器。例如: data List a = Cons a (List a) | Nil 可以使用 Scott 编码进行编码: c
假设我有一个类: class C{ int x_; int y_; public: C(int x, int y): x_(x), y_(y){} }; 然后我想从一个字符串中添加结构,它
我正在测试使用 OpenRasta 作为 ASP.NET MVC 的可行替代方案的可行性。但是,我遇到了有关身份验证的绊脚石。 让我明确一点,“开放式摘要身份验证”目前不是一个选项。 我读到 Scot
因此,这个问题最终将涉及技术问题,但首先请与Atwood(等)一起查看Hanselminutes,Scott基本上邀请开发人员尝试入侵该网站。这是一个呼ot声。我首先想到了(当然,要大声一点,因为戴着
很抱歉,如果这个问题很愚蠢或已得到解答,但我在任何地方都找不到是或否。 在我们的生产 Oracle 环境中,是否可以删除架构 SCOTT? 我知道它是一个示例架构,但我们的安全部门希望删除任何未使用的
我有一个必须在 Scott 帐户上完成的数据库作业,有没有办法获取架构?我在哪里可以找到支持 Oracle 的在线 sql 编辑器? 最佳答案 我建议安装 Oracle Express Edition
我过来了this question最近,对 Instance() 函数的实现产生了疑问: class Configuration { public: static Configuration*
我一直在整个 Internet 上寻找有关使用 Scott Kellum 的视差技术的教程,但没有找到。我在 CodePen 上看过他的示例,但我一直无法弄清楚如何在页面上正确定位和调整元素大小。 假
我正在关注 Item6,它是 Scott Meyers 着的 Effective STL: 50 Specific Ways to Improve Your Use of the Standard T
我正在阅读 std::shared_ptr在Effective Modern C++14 Scott Meyers 的书。这是一段代码,作者说其中可能存在资源泄漏: int computePriori
使用 SCOTT Schema .我试图找到薪水最接近平均水平的人。 SELECT sal FROM ( SELECT sal FROM emp
目前,在 Windows XP 上使用 Oracle DB 11g。以具有授予 DBA 角色的 scott 用户(不是 sysdba)身份登录。根据 Oracle 文档“DBA = 所有系统权限 WI
当我尝试通过输入“scott”作为用户名和“tiger”作为密码来登录 Oracle Sql plus 时,它显示“帐户已锁定”。如何解锁“斯科特”帐户。 SQL Plus CLI 的屏幕截图如下所示
Scott编码列表可以定义如下: newtype List a = List { uncons :: forall r. r -> (a -> List a -> r) -> r
我正在阅读 the Rank-N-Types section of 24 days of GHC Extensions并遇到了以下 GADT: {-# LANGUAGE GADTs #-} {-# L
我正在阅读 the Rank-N-Types section of 24 days of GHC Extensions并遇到了以下 GADT: {-# LANGUAGE GADTs #-} {-# L
我正在研究 Michael & Scott 的无锁队列算法,并尝试用 C++ 实现它。 但是我在代码中产生了竞争,并且认为算法中可能存在竞争。 我在这里阅读了这篇论文: Simple, Fast, a
我正在阅读 Scott Meyers 所著的 Effective Modern C++ 中的条件变量,下面是文本。 std::condition_variable cv std::mutex
尝试在 oracle 19c 中解锁 SCOTT。 alter user scott account unlock identified by tiger; 错误信息: ORA-01918: 用户
我是一名优秀的程序员,十分优秀!