Yuji Yamamoto (山本悠滋)
2018/08/18 プリキュアハッカソン NewStage
cure-index.json を完成させた話です軽いデモ
$ stack exec ghci -- -interactive-print="Text.Show.Unicode.uprint"
> import ACME.PreCure
> printEpisode $ transform (Mirai, Liko) (Mofurun LinkleStoneDia)
詳しくはこっち👇に書きましたがここでも軽く紹介
https://haskell.jp/blog/posts/2017/typesafe-precure2.html
data CureMiracle = CureMiracle deriving (Eq, Show)
transformedInstance
[t| CureMiracle |]
cureName_Miracle
introducesHerselfAs_Miracle
variation_DiacureName_Miracle = "キュアミラクル"
introducesHerselfAs_Miracle = "ふたりの奇跡!キュアミラクル!"
variation_Dia = "ダイヤスタイル""キュアミラクル"ぐらい使い回さんでもええやろ、って気もしますが、当時の私は狂ったように共通化してました😅※Words.hsについては面倒なので書き換えはせず
修正前との重要な違い:
StringScannerを使うと割と近いものができるよ!おことわり hask(_ _)eller
10進数の文字列を受け取って、整数を返すパーサー
123と、残りの文字列"abc"を返す以上を組み合わせて、
10進数の文字列を受け取った後、カンマを受け取り、整数を返すパーサー
を作る
> digitsAndComma = do
n <- digits
char ','
return n
> parse digistsAndComma "123,abc"
(123, "abc") -- 結果にカンマが含まれてない点に注意manyを使って、
10進数の文字列を受け取った後、カンマを受け取り、整数を返すパーサー
から、
カンマで区切られたたくさんの整数のリストを返すパーサー
を作る
digitsは、パースした結果を直接整数(Int)として返している*
にあたるmanyが、必ず強欲なマッチになる(後述)\A (あるいは
^)を着けなければならないイメージ\A.*(マッチさせたい文字列)
を書けばよい話ではなく、\A(マッチさせたくない文字列)*(マッチさせたい文字列)
みたいに書かないといけない*
にあたるmanyが強欲なマッチになる」ため、\A.*(マッチさせたい文字列)と書くと、.*が(マッチさせたい文字列)がマッチさせたい文字列まで飲み込んでしまう任意のパーサーコンビネーターを
文字列の中間でも
マッチするよう変換するライブラリーを作りました!
(マッチさせたくない文字列)をスキップすることができる
こちらのコミット時点のパーサーで、
同時点のTypes.hsから、
cure-indexで使用するGirlという型の値を取り出します!
stack build :migrate2cure-index
stack exec migrate2cure-index
Space, Right Arrow or swipe left to move to next slide, click help below for more details