小编Ext*_*ity的帖子

亲切的签名

我正在浏览Haskell维基书籍GADTS

https://en.wikibooks.org/wiki/Haskell/GADT指南.

我一直很好地跟踪,直到添加了一个Kind签名,它概括了Cons构造函数的约束类型.

data Safe
data NotSafe

data MarkedList             ::  * -> * -> * where
  Nil                       ::  MarkedList t NotSafe
  Cons                      ::  a -> MarkedList a b -> MarkedList a c

safeHead                    ::  MarkedList a Safe -> a
safeHead (Cons x _)          =  x


silly 0                      =  Nil
silly 1                      =  Cons () Nil
silly n                      =  Cons () $ silly (n-1)
Run Code Online (Sandbox Code Playgroud)

使用Kind Signature,我可以使用Cons构造函数来构造和模式匹配安全和不安全的MarkedLists.虽然我明白发生了什么,但遗憾的是我难以建立任何关于Kind Signature如何允许这种情况的直觉.为什么我需要种类签名?Kind Signature做什么?

haskell types

12
推荐指数
1
解决办法
3386
查看次数

Haskell可扩展IO异常?

在基础4.4.0.0的Control.Exception文档中,有一个如何创建异常层次结构的示例.该示例显示了如何通过根据父异常声明Exception类的实例来捕获特定异常的概括.这很酷,但是如何让我的例外孩子成为现有例外.例如,我想创建由IOException上的类型约束捕获的异常.Control.Exception中的示例显示了以下内容:

*Main> throw MismatchedParentheses catch (\e -> putStrLn ("Caught " ++ show (e :: SomeCompilerException)))
Caught MismatchedParentheses

*Main> throw MismatchedParentheses catch (\e -> putStrLn ("Caught " ++ show (e :: IOException)))
*** Exception: MismatchedParentheses
Run Code Online (Sandbox Code Playgroud)

如何获取IOException约束来捕获我的异常?

haskell

5
推荐指数
1
解决办法
327
查看次数

标签 统计

haskell ×2

types ×1