ã€ããŠãããèšããšãããåã¯ã©ã¹ã䜿ããªããšã§ããªãã®ã§ãã
ãªãããšãããšãHaskellã®ãã¿ãŒã³ç
§åã¯ãåãã§ã¯ãªããå€ããç
§åãããã®ã§ãã
äŸãã°ã
data Bool = True | False
ãšããåãããã°ã
f :: Bool -> Int
f True = 1
f False = 2
ãšãããã¿ãŒã³ç
§åã¯ã§ããŸããã
f Bool = 3
ãšããã®ã¯ãã§ããŸããã
倧竹ãããæžããå宣èšã
> > toMessagePack :: [a] -> Int
ã§ã¯ããaããšããåŒæ°ã®åã¯äœãåãããªãã®ã§ã
ãã®åã®å€ïŒBoolã§ããã°TrueãFalseãIntã§ããã°1ã2ãªã©ïŒãç
§åã§ããªãã®ã§ãã
ãã®ãšãã¯ãã¿ãŒã³ç
§åã§ã¯ãªããåã¯ã©ã¹ïŒã¢ãããã¯å€çžïŒã䜿ããŸãã
ããããæãã®åã¯ã©ã¹ãããã°ã
class MessagePackable a where
toObject :: a -> Object
fromObject :: Object -> a
倧竹ããã®é¢æ°ã¯ãããªæãã§å®£èšã§ããŸãã
toMessagePack :: MessagePackable a => [a] -> Int
ãã®å Žåã¯ããaãã®å€ã¯äžã€åããããšãå¢ããã
ããã¯ããtoObjectãfromObjectãšãã颿°ãåŒã¹ãããšããããšã§ãã
Objectã®å®çŸ©ãèŠããšã
data Object = ObjectInt Int
| ObjectNil
| ObjectBool Bool
...
å€ã¯ObjectIntã ã£ããIntãå
¥ã£ãŠãããObjectBoolã ã£ããBoolãå
¥ã£ãŠããã
ãšãã圢ã§å®çŸ©ãããŠããŸãã
ãããæã£ãŠããããå€ã§ãã¿ãŒã³ç
§åãã§ããŸãã
toMessagePack (ObjectInt _ :xs) = 1
toMessagePack (ObjectString _ :xs) = 2
ãã®å Žåã¯åïŒInt, BoolïŒã§ã¯ãªãå€ïŒObjectInt, ObjectStringïŒãç
§åããŠããã®ã§å€§äžå€«ã§ãã
çµæ§é·ãæç« ã«ãªã£ãŠããŸã£ãŠãã¿ãŸããã
ç§ã¯åããŠHaskellãå匷ãããšãããã®ãåããšãå€ãã®éãã¯ãªããªãåãããªãã£ãã®ã§ã
å°ãã§ãã圹ã«ç«ã£ãŠãããããªãšæã£ãŠãŸãšããŠã¿ãŸããã
å ã¿ã«äžèšã®ããã±ãŒãžãåç¥ã§ããïŒ
http://hackage.haskell.org/package/msgpack
ãã¡ãã®æ¹ãOBJECTãšããåã¯ã©ã¹ãå®çŸ©ãããŠããã®ã§ã
ãã ãIntãMessagePackã«ãããããšããããšã ã£ãã
ãã®ããã±ãŒãžã®æ¹ã䜿ãããããããããŸããã
éã«ãå匷ã®ãããèªåã§ãããããšæã£ãŠãã
Hackageã§"source"ã®ãªã³ã¯ãã¯ãªãã¯ããããœãŒã¹ã³ãŒããèŠããã®ã§ã
åèã«ãªããšæããŸãã
Katsutoshi Itoh (Sat, Oct 11, 2014 at 10:23:47AM +0900) >>
> ã¢ãããã¯å€çžãããããã£ãŠããšã§ããã®ããªã
> åºæ¬çã«ã¯MessagePackable(?)ã®ãããªã¯ã©ã¹ãçšæããŠãto_msgpackãªã¡ãœãããçšæããŠãããŠãããšã¯IntããStringãããMessagePackableã®ã€ã³ã¹ã¿ã³ã¹ã«ããŠããããšã«ãªãããšæããŸãã
>
> 2014幎10æ10æ¥éææ¥ã倧竹å°åŸ<
shogo...@gmail.com>ããã¯æžããŸãã:
>
> > ã¯ãããŸããŠã
> >
> > æè¿Haskellã®å匷ãå§ãããã®ã§ãã
> >
> >
> > 以äžã®ããã±ãŒãžã䜿ã£ãŠrubyçã®to_msgpackã®ãããªé¢æ°ãäœããããªãšæã£ãŠããŸãã
> >
> >
http://hackage.haskell.org/package/messagepack
> >
> >
> >
> > toMessagePack :: [a] -> Int
> > toMessagePack (x: xs :: Int) = 1
> > toMessagePack (x: xs :: String) = 2
> >
> >
> > ãã®ãããªæãã§aã®åã«ãã£ãŠåŠçãåãããã®ã§ããã©ã®ããã«æžãã°å®çŸã§ããã®ã§ããããã
> > 埡æç€ºé ããã幞ãã§ãã
> >
> > ãããããé¡ãèŽããŸãã
> >
> > --
> > ãã®ã¡ãŒã«ã¯ Google ã°ã«ãŒãã®ã°ã«ãŒããhaskell-jpãã«ç»é²ããŠãããŠãŒã¶ãŒã«éãããŠããŸãã
> > ãã®ã°ã«ãŒãããéäŒããã°ã«ãŒãããã®ã¡ãŒã«ã®é
ä¿¡ã忢ããã«ã¯
haskell-jp+...@googlegroups.com
> > <javascript:_e(%7B%7D,'cvml','
haskell-jp%2Bunsu...@googlegroups.com');>
> --
> ãã®ã¡ãŒã«ã¯ Google ã°ã«ãŒãã®ã°ã«ãŒããhaskell-jpãã®ç»é²è
ã«éãããŠããŸãã