çæ§ããã€ãç確ãªã¢ããã€ã¹ããããšãããããŸãã
èæžããããHaskell楜ããåŠãŒãïŒããèªãã§ããŠã
ãŸããäºçްãªç¹ãæ°ã«ãªããŸããã®ã§ã質åãããŠé ããŸãã
P.262ïŒ12.1 æ¢åã®åãæ°ããåã«ãããïŒã§ã¯ã
   helloMe :: CoolBool -> String
   helloMe (CoolBool _) = "hello"
ãšãã颿°ãããšã«ãdata ãš newtype ããŒã¯ãŒãã®åäœã®éãã«ã€ããŠèª¬æããŠããŸãã
â dataããŒã¯ãŒãã§ CoolBool åãå®çŸ©ããå Žå
   data CoolBool = CoolBool { getCoolBool :: Bool }
   <å®è¡çµæ>
   ghci> helloMe undefined
   "*** Exception: Prelude.undefined
â newtypeããŒã¯ãŒãã§ CoolBool åãå®çŸ©ããå Žå
   newtype CoolBool = CoolBool { getCoolBool :: Bool }
   <å®è¡çµæ>
   *Main> helloMe undefined
   "hello"
ãã®éãã«ã€ããŠã¯ã
> ãã㊠Haskell ã¯ãnewtype ããŒã¯ãŒãã¯ã³ã³ã¹ãã©ã¯ã¿ãïŒã€ããäœããªããš
> ç¥ã£ãŠããã®ã§ãhelloMe颿°ã®åŒæ°ãè©äŸ¡ããããšãªããåŒæ°ã (CoolBool _)
> ãã©ã¡ãŒã¿ã«åèŽãããšå€å®ã§ããŸãã
ãšèª¬æããŠããŸãã
hiratara ããã
> http://d.hatena.ne.jp/hirataraSideB/20090606/p1
> dataãšnewtypeã®ã¡ããã®ããããããäŸãæ¶ããŠãããæ¬åœã«å°ã£ãŠããã
dataãšnewtypeã®ã¡ããã®ããããããäŸ
http://web.archive.org/web/20070122231856/http://haskell.g.hatena.ne.jp/jmk/20061203
ãã¡ãã§èªããŸããã
hirataraãããKazu ããã
ãäºæ¹ãšããæ©ã ã®ãåçæé£ãããããŸããã
> ãã㊠Haskell ã¯ãnewtype ããŒã¯ãŒãã¯ã³ã³ã¹ãã©ã¯ã¿ãïŒã€ããäœããªããš
> ç¥ã£ãŠããã®ã§ãhelloMe颿°ã®åŒæ°ãè©äŸ¡ããããšãªããåŒæ°ã (CoolBool _)
> ãã©ã¡ãŒã¿ã«åèŽãããšå€å®ã§ããŸãã
hiratara wrote:
> ãã£ããããšããdataã®ã³ã³ã¹ãã©ã¯ã¿ã1ã€ã®å Žåã ãç¹å¥æ±ããã
> åäœã«ãã§ããã§ããããã
ãšåçé ãããé°ã§ããã®èŸºã®ã¢ã€ã¢ã€ã¯æŽããŸããã
ãªãã
> http://www.haskell.org/onlinereport/decls.html#sect4.2.3
> æ¥æ¬èª http://www.sampou.org/haskell/report-revised-j/decls.html#sect4.2.3
> 4.2.3 Datatype Renamings
> ...
> Unlike algebraic datatypes, the newtype constructor N is unlifted, so that N _|_ is the same as _|_.
Haskell/Denotational semantics ããã ãšéšå颿° ⥠ããã (Bottom)
http://ja.wikibooks.org/wiki/Haskell/Denotational_semantics#.E3.83.9C.E3.83.88.E3.83.A0.E3.81.A8.E9.83.A8.E5.88.86.E9.96.A2.E6.95.B0
Kazu wrote:
> ããããè°è«ã¯ä»¥åãã£ããšæããŸãããã©ãããçµè«ãåºããèŠããŠããŸããã
å°ãæ°ã«ãªããŸãã
ïŒç¶ãïŒ
newtype ã®ååšæçŸ©ã«ã€ããŠã
hiratara wrote:
> newtypeã¯èŠããªãã®ã§ã¯ããšèšãææã§ããã°ããçšåºŠããããŸããã
Kazu wrote:
> newtype ã¯ãããã«ãããã°ã©ããŒã«æé©åãæŒãä»ããŠãã仿§ãªã®ã§ããªããªãã®ãçæ³çã§ããã
ãäºæ¹ä»¥å€ã«ããé äºããã®ããã°ã«
λ. newtypeã¯Haskellã®ä»æ§ã«äžèŠã§ã¯?
http://msakai.jp/d/?date=20061206#p01
ãšæžãããŠããŸãã
確èªãããŠé ãããã®ã§ããã
ãšããçšéã«ã¯ãdata ã§ååãšããããšã§ãããã
é äºããã
äžå¯§ãªã説æããããšãããããŸããã
ããçè§£ã§ããŸããã
> äžèŠãªãªãããæ°æã¡æªããšããçç±ããããŸããã
ãªãã»ã©ãçŽåŸããŸããã
æ£æ Œãã©ã°ã䜿ãããdata ããŒã¯ãŒãã§å
ã®åãå
ããšãå Žåã
å
ã®åããªããããããå³ã¡ãå€éåãå€ããããšããããšã§ããã
data ã§ã¯ãªã newtype ã§åãå
ãçç±ãšããŠã
å¹çãæããããããšããããŸããã
ãã¡ãã®æ¹ããããæ¬è³ªçãªçç±ã«æããŸãã
ãããããã
> GHC ã§ã¯ GeneralizedNewtypeDeriving æ¡åŒµã䜿ãããšã§ã newtype ã«å ãåã®åã€ã³ã¹ã¿ã³ã¹ãèªåçã«å ãã åŸã®åã«å»¶é·ããããšãåºæ¥ãŸãã
ãããïŒãããã§ããã
GeneralizedNewtypeDeriving æ¡åŒµã¯ RWH ã§ç®ã«ããŸãããã
newtype ã®ã¡ãªãããšããŠèªèããŠãŸããã§ããã
æ
å ±ããããšãããããŸããã