一个Hashell模块

原创 2015年07月06日 20:38:04


1.暴露模块的接口

module ModuleName (XXX) where

XXX为暴露的内容


2.导入模块

import XXX

XXX为模块名


3.代码来之Real World Haskell


定义Json

SimpleJSON.hs

module SimpleJSON
    (
        JValue(..)
    ,   getString
    ,   getInt
    ,   getDouble
    ,   getBool
    ,   getObject
    ,   getArray
    ,   isNull
    ) where

data JValue = JString String
            | JNumber Double
            | JBool Bool
            | JNull
            | JObject [(String, JValue)]
            | JArray [JValue]
              deriving (Eq, Ord, Show)

getString :: JValue -> Maybe String
getString (JString s) 		= Just s
getString _           		= Nothing	
getInt (JNumber n) 			= Just (truncate n)
getInt _           			= Nothing
getDouble (JNumber n) 		= Just n
getDouble _           		= Nothing
getBool (JBool b) 			= Just b
getBool _         			= Nothing
getObject (JObject o) 		= Just o
getObject _           		= Nothing
getArray (JArray a) 		= Just a
getArray _          		= Nothing
isNull v            		= v == JNull


4.Demo8.hs

module PutJSON where

import Data.List (intercalate)
import SimpleJSON

renderJValue :: JValue -> String

renderJValue (JString s)   = show s
renderJValue (JNumber n)   = show n
renderJValue (JBool True)  = "true"
renderJValue (JBool False) = "false"
renderJValue JNull         = "null"

renderJValue (JObject o) = "{" ++ pairs o ++ "}"
		where 
		pairs [] = ""
		pairs ps = intercalate ", " (map renderPair ps)
		renderPair (k,v)   = show k ++ ": " ++ renderJValue v

renderJValue (JArray a) = "[" ++ values a ++ "]"
		where 
		values [] = ""
		values vs = intercalate ", " (map renderJValue vs)

5.Main.hs

module Main (main) where
import SimpleJSON

main = print (JObject[("foo",JNumber 1),("bar", JBool False)])



版权声明:本文为博主原创文章,未经博主允许不得转载。

FPGA开发之数据传输模块

USB模式:通用串行总线,由VBUS,GND,D+,D-构成(USB3.0可以达到5Gbps)。具有不同的速度模式,当D-上拉的时候一个1.5k电阻到3.3v那么处于低速模式,否则处于上拉D+高速模式...
  • c602273091
  • c602273091
  • 2015年02月04日 12:17
  • 1489

自己开发一个项目的模块总结

历时18天自己完整的写了一个web模块,这里就是对自己写的做一个总结。让自己知道有哪些收获。也给大家一个借鉴。 1.后台服务 在给你需求文档和UI界面之后,你需要通过界面来,阅读文档。 看业务,大...
  • lvhao2813
  • lvhao2813
  • 2016年08月09日 10:53
  • 505

一个模块引用另一个模块导出的函数

编写一个内核模块,在模块中引用另一个模块的导出函数。 编写提供plus导出函数的module_plus模块 (1)源程序 #include #include #include MODULE_L...
  • lileidajiangjun
  • lileidajiangjun
  • 2014年02月27日 20:21
  • 1042

Python学习笔记4-如何快速的学会一个Python的模块、方法、关键字

想要快速的学会一个Python的模块和方法,两个函数必须要知道,那就是dir()和help() dir():能够快速的以集合的型式列出该模块下的所有内容(类、常量、方法)例: #--enc...
  • work201003
  • work201003
  • 2016年01月01日 18:35
  • 641

JSP多个模块时解决方法

当一个页面有多个模块,最好的方式是:将每个模块抽离成一个单独的JSP。 界面简洁,易于查询问题所在。 (1)场景一 只有多个模块,不存在动态生成模块 JSP J...
  • qq503318485
  • qq503318485
  • 2016年08月16日 09:56
  • 471

在一个模块中分配的内存在另外一个模块释放

tech]在一个模块中分配的内存在另外一个模块释放? clkrst @ 16/09/2005-19:13 在linux下跑得一直很好的程序,到了windows下面就跑不起来了。内存异常,检查了一...
  • kendyhj9999
  • kendyhj9999
  • 2013年08月04日 13:40
  • 630

怎么样写一个 node.js模块以及NPM Package

你来到了写一个mode.js模块的舞台中央,不管你是因为自己需要写一个你自己的nodejs模块,还是你仅仅是处于好奇。无论是什么原因,在这个教程里,我将给你演示怎样创建一个nodejs模块。    ...
  • crystalNB
  • crystalNB
  • 2013年04月10日 18:42
  • 4832

nodejs中的模块定义

1.模块定义 nodejs所谓的模块就是一个文件!一个.js文件就是一个nodejs的模块,模块与文件是一一对应的,那么引用模块就是require('文件路径')。 如: var circle...
  • liao272549164
  • liao272549164
  • 2015年05月13日 19:35
  • 1867

xposed模块开发步骤总结

一、成为xposed模块 要成功xposed模块,被xposed识别,一般需要在清单文件中标识该三个元数据(meta-data)...
  • CSDN_LQR
  • CSDN_LQR
  • 2016年08月18日 21:34
  • 6666

NodeJS中模块和包

模块什么是模块模块是Node.js应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个Node.js文件就是一个模块,这个文件可能是JavaScript代码、JSON或者编译过的C/C++扩展...
  • zhujun_xiaoxin
  • zhujun_xiaoxin
  • 2017年05月25日 16:10
  • 357
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个Hashell模块
举报原因:
原因补充:

(最多只允许输入30个字)