Haskell的newtype研究
来源:互联网 发布:嵌套sql语句执行顺序 编辑:程序博客网 时间:2024/06/06 18:17
代码
data BookType = History | Music deriving (Show,Eq)newtype MyBook = MyBook{bookname::BookType -> String}newtype HisBook = HisBook{headBook::BookType -> Int->String}newtype HerBook i r = HerBook{lowBook::i -> r}
解释说明
第一个是无参构造的多值类型
第二个带有一个构造函数的newtype类型,需要实现其bookname函数才能实例化出来
第三个带有两个构造函数,需要实现其headBook函数才能实现出来
第四个和第二个在实现上一致,但是其类型不是MyBook,而是HerBook i r。i,r取决于实现的lowBook的方式。
采用第四种的方式,主要含义是在进行Monad时,保留部分类型约束。如果仅有一个类型参数(例如Maybe a),那么在进行>>=运算时,会丢掉a的类型。那么HerBook i r的i就会被丢掉。我们就不知道到底是HerBook BookType类型,还是HerBook String类型了。
-- (show $ toUpper.head bt) ++ ":" ++ (show count)main = do let c = MyBook{bookname = \bt -> show bt} let d = HisBook{headBook = \bt count -> (show $ toUpper.head $ show bt)++ ":" ++ (show count)} let e = HerBook{lowBook = \bt -> (show $ map toLower $show bt)} let f = HerBook{lowBook = \bt -> length $ show bt} print $ bookname c History print $ headBook d History 14 print $ lowBook e History print $ lowBook f History
接下来是同义转换
newtype History t a = History {observe :: t -> a }d::History Int Intd = History $ \x -> (x + 1)data HistoryData t a = HistoryData tmyobserve :: HistoryData t a -> (t->a) -> amyobserve (HistoryData t) f = f t
0 0
- Haskell的newtype研究
- haskell的世界观(1)
- haskell的世界观(2)
- haskell的世界观(3)
- haskell的世界观(4)
- haskell的类型转换
- 关于haskell的讨论
- Haskell的缩进
- haskell的世界观(1)
- haskell的世界观(2)
- haskell的世界观(3)
- haskell的世界观(4)
- haskell排序的操作
- 神奇的Haskell
- Haskell 的范畴
- Haskell的list
- Haskell的WriterMonad解构
- Haskell
- Spring定时器
- spring工具类AntPathMatcher
- 低版本textView.setAlpha 报错java.lang.NoSuchMethodError: widget.TextView.setAlpha
- Android 触摸及手势操作GestureDetector
- rabbitmq 常用命令
- Haskell的newtype研究
- linux 之间设置无密码登录
- vs2010 问题 >LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- 手机APP测试流程&方法
- Android res/raw文件 读取文件
- CCNP-BGP基本配置 理解IBGP和EBGP 学会IBGP全互联 学会用环回口建立EBGP邻居
- CCNP-冗余链路中的广播风暴、多帧复制、地址表的不稳定
- CCNP-GNS3中telnet、ssh和https的详细配置步骤和测试
- OKHttp源码解析