一个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)])



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

相关文章推荐

一个iptables的stateless NAT模块实现

  • 2014年12月27日 20:35
  • 15KB
  • 下载

手把手教你如何开始一个angular模块

一、安装SVN(或者git) 1、下载小乌龟工具(SVN工具),百度搜索SVN即可 2、打开SVN安装包,一路next默认安装即可 二、从公司SVN (或者git)上面拷贝公司目前的前端代码...

Spring JDBC实践之--Yale CAS登录模块的一个典型的客户化

转自:http://jkam.iteye.com/blog/610236  项目使用Yale CAS+Spring Security实现单点登录以及权限验证  需要对Yale CA...
  • wgwxf
  • wgwxf
  • 2013年09月13日 15:59
  • 1047

今天突然看到第一个模块是linux,就找了一个,看看。

进程管理 1.进程的查看 1)ps命令 选项-a:显示一个终端的所有进程-u:显示进程的归属用户及内存的使用情况-x:显示没有控制终端的进程-l 长格式显示。显示更加详细的信息-e:...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个Hashell模块
举报原因:
原因补充:

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