packages feed

typesafe-precure 0.3.1.1 → 0.4.0.0

raw patch · 12 files changed

+1668/−198 lines, 12 filesdep +aesondep +aeson-prettydep +bytestring

Dependencies added: aeson, aeson-pretty, bytestring, text, th-strict-compat, th-utilities

Files

CHANGELOG.md view
@@ -1,3 +1,9 @@+# 0.4.0.0 (2017/10/07)++- Add: More transformations and purifications of Kirakira :star: PreCure A La Mode, including Cure Parfait's and Kirakiraru Creamer's.+- Add: Experimental feature: [cure-index.json](https://github.com/igrep/typesafe-precure/blob/master/gen/cure-index.json) and [pretty-cure-index.json](https://github.com/igrep/typesafe-precure/blob/master/gen/pretty-cure-index.json) are generated at build-time by Template Haskell.+    - Currently, only data of Kirakira :star: A La Mode is collected.+ # 0.3.1.1 (2017/06/05)  - Improve documentation :memo: : Add README and CHANGELOG to extra-source-files, to make README readable on hackage.org.
+ gen/cure-index.json view
@@ -0,0 +1,1 @@+{"girls":[{"id":"Ichika","nameEn":"Ichika Usami","nameJa":"宇佐美 いちか"},{"id":"Himari","nameEn":"Himari Arisugawa","nameJa":"有栖川 ひまり"},{"id":"Aoi","nameEn":"Aoi Tategami","nameJa":"立神 あおい"},{"id":"Yukari","nameEn":"Yukari Kotozume","nameJa":"琴爪 ゆかり"},{"id":"Akira","nameEn":"Akira Kenjo","nameJa":"剣城 あきら"},{"id":"Ciel","nameEn":"Ciel Kirahoshi","nameJa":"キラ星 シエル"}],"transformees":[{"id":"CureWhip","nameEn":"Cure Whip","nameJa":"キュアホイップ","introducesHerselfAs":"ショートケーキ!元気と笑顔を!レッツ・ラ・まぜまぜ!キュアホイップ!できあがり!","variation":""},{"id":"CureCustard","nameEn":"Cure Custard","nameJa":"キュアカスタード","introducesHerselfAs":"プリン!知性と勇気を!レッツ・ラ・まぜまぜ!キュアカスタード!できあがり!","variation":""},{"id":"CureGelato","nameEn":"Cure Gelato","nameJa":"キュアジェラート","introducesHerselfAs":"アイス!自由と情熱を!レッツ・ラ・まぜまぜ!キュアジェラート!できあがり!","variation":""},{"id":"CureMacaron","nameEn":"Cure Macaron","nameJa":"キュアマカロン","introducesHerselfAs":"マカロン!美しさとトキメキを!レッツ・ラ・まぜまぜ!キュアマカロン!できあがり!","variation":""},{"id":"CureChocolat","nameEn":"Cure Chocolat","nameJa":"キュアショコラ","introducesHerselfAs":"チョコレート!強さと愛を!レッツ・ラ・まぜまぜ!キュアショコラ!できあがり!","variation":""},{"id":"CureParfait","nameEn":"Cure Parfait","nameJa":"キュアパルフェ","introducesHerselfAs":"パフェ!夢と希望を!レッツ・ラ・まぜまぜ!キュアパルフェ!できあがり!","variation":""}],"specialItems":[{"id":"SweetsPact","nameEn":"Sweets Pact","nameJa":"スイーツパクト","attachments":["Animal Sweets"]},{"id":"RabbitShortcake","nameEn":"Rabbit Shortcake","nameJa":"うさぎショートケーキ","attachments":[]},{"id":"SquirrelPudding","nameEn":"Squirrel Pudding","nameJa":"りすプリン","attachments":[]},{"id":"LionIce","nameEn":"Lion Ice","nameJa":"らいおんアイス","attachments":[]},{"id":"CatMacaron","nameEn":"Cat Macaron","nameJa":"ねこマカロン","attachments":[]},{"id":"DogChocolate","nameEn":"Dog Chocolate","nameJa":"いぬチョコレート","attachments":[]},{"id":"PegasusParfait","nameEn":"Pegasus Parfait","nameJa":"ペガサスパフェ","attachments":[]},{"id":"CandyRod","nameEn":"Candy Rod","nameJa":"キャンディロッド","attachments":[]},{"id":"RainbowRibbon","nameEn":"Rainbow Ribbon","nameJa":"レインボーリボン","attachments":[]},{"id":"KirakiraruCreamer","nameEn":"Kirakiraru Creamer","nameJa":"キラキラルクリーマー","attachments":["Crystal Animal"]},{"id":"CrystalAnimalRabbit","nameEn":"Crystal Animal Rabbit","nameJa":"クリスタルアニマルうさぎ","attachments":[]},{"id":"CrystalAnimalSquirrel","nameEn":"Crystal Animal Squirrel","nameJa":"クリスタルアニマルりす","attachments":[]},{"id":"CrystalAnimalLion","nameEn":"Crystal Animal Lion","nameJa":"クリスタルアニマルらいおん","attachments":[]},{"id":"CrystalAnimalCat","nameEn":"Crystal Animal Cat","nameJa":"クリスタルアニマルねこ","attachments":[]},{"id":"CrystalAnimalDog","nameEn":"Crystal Animal Dog","nameJa":"クリスタルアニマルいぬ","attachments":[]},{"id":"CrystalAnimalPegasus","nameEn":"Crystal Animal Pegasus","nameJa":"クリスタルアニマルペガサス","attachments":[]}],"transformations":[{"transformers":["Ichika"],"specialItems":[{"a":["RabbitShortcake"],"i":"SweetsPact"}],"transformees":["CureWhip"],"speech":["キュアラモード・デコレーション!","ショートケーキ!","元気と笑顔を!","レッツ・ラ・まぜまぜ!","キュアホイップ!できあがり!"]},{"transformers":["Himari"],"specialItems":[{"a":["SquirrelPudding"],"i":"SweetsPact"}],"transformees":["CureCustard"],"speech":["キュアラモード・デコレーション!","プリン!","知性と勇気を!","レッツ・ラ・まぜまぜ!","キュアカスタード!できあがり!"]},{"transformers":["Aoi"],"specialItems":[{"a":["LionIce"],"i":"SweetsPact"}],"transformees":["CureGelato"],"speech":["キュアラモード・デコレーション!","アイス!","自由と情熱を!","レッツ・ラ・まぜまぜ!","キュアジェラート!できあがり!"]},{"transformers":["Yukari"],"specialItems":[{"a":["CatMacaron"],"i":"SweetsPact"}],"transformees":["CureMacaron"],"speech":["キュアラモード・デコレーション!","マカロン!","美しさとトキメキを!","レッツ・ラ・まぜまぜ!","キュアマカロン!できあがり!"]},{"transformers":["Akira"],"specialItems":[{"a":["DogChocolate"],"i":"SweetsPact"}],"transformees":["CureChocolat"],"speech":["キュアラモード・デコレーション!","チョコレート!","強さと愛を!","レッツ・ラ・まぜまぜ!","キュアショコラ!できあがり!"]},{"transformers":["Ciel"],"specialItems":[{"a":["PegasusParfait"],"i":"SweetsPact"}],"transformees":["CureParfait"],"speech":["キュアラモード・デコレーション!","パフェ!","夢と希望を!","レッツ・ラ・まぜまぜ!","キュアパルフェ!できあがり!"]},{"transformers":["Ichika","Himari","Aoi","Yukari","Akira"],"specialItems":[{"a":["RabbitShortcake"],"i":"SweetsPact"},{"a":["SquirrelPudding"],"i":"SweetsPact"},{"a":["LionIce"],"i":"SweetsPact"},{"a":["CatMacaron"],"i":"SweetsPact"},{"a":["DogChocolate"],"i":"SweetsPact"}],"transformees":["CureWhip","CureCustard","CureGelato","CureMacaron","CureChocolat"],"speech":["キュアラモード・デコレーション!","ショートケーキ!","元気と笑顔を!","レッツ・ラ・まぜまぜ!","キュアホイップ!できあがり!","キュアカスタード!できあがり!","キュアジェラート!できあがり!","キュアマカロン!できあがり!","キュアショコラ!できあがり!","キラキラ☆プリキュアアラモード!"]},{"transformers":["Ichika","Himari","Aoi","Yukari","Akira","Ciel"],"specialItems":[{"a":["RabbitShortcake"],"i":"SweetsPact"},{"a":["SquirrelPudding"],"i":"SweetsPact"},{"a":["LionIce"],"i":"SweetsPact"},{"a":["CatMacaron"],"i":"SweetsPact"},{"a":["DogChocolate"],"i":"SweetsPact"},{"a":["PegasusParfait"],"i":"SweetsPact"}],"transformees":["CureWhip","CureCustard","CureGelato","CureMacaron","CureChocolat","CureParfait"],"speech":["キュアラモード・デコレーション!","ショートケーキ!","元気と笑顔を!","レッツ・ラ・まぜまぜ!","キュアホイップ!できあがり!","キュアカスタード!できあがり!","キュアジェラート!できあがり!","キュアマカロン!できあがり!","キュアショコラ!できあがり!","キュアパルフェ!できあがり!","キラキラ☆プリキュアアラモード!"]},{"transformers":["Himari","Ichika","Aoi","Yukari","Akira"],"specialItems":[{"a":["SquirrelPudding"],"i":"SweetsPact"},{"a":["RabbitShortcake"],"i":"SweetsPact"},{"a":["LionIce"],"i":"SweetsPact"},{"a":["CatMacaron"],"i":"SweetsPact"},{"a":["DogChocolate"],"i":"SweetsPact"}],"transformees":["CureCustard","CureWhip","CureGelato","CureMacaron","CureChocolat"],"speech":["キュアラモード・デコレーション!","プリン!","知性と勇気を!","レッツ・ラ・まぜまぜ!","キュアホイップ!できあがり!","キュアカスタード!できあがり!","キュアジェラート!できあがり!","キュアマカロン!できあがり!","キュアショコラ!できあがり!","キラキラ☆プリキュアアラモード!"]},{"transformers":["Aoi","Ichika","Himari","Yukari","Akira"],"specialItems":[{"a":["LionIce"],"i":"SweetsPact"},{"a":["RabbitShortcake"],"i":"SweetsPact"},{"a":["SquirrelPudding"],"i":"SweetsPact"},{"a":["CatMacaron"],"i":"SweetsPact"},{"a":["DogChocolate"],"i":"SweetsPact"}],"transformees":["CureGelato","CureWhip","CureCustard","CureMacaron","CureChocolat"],"speech":["キュアラモード・デコレーション!","アイス!","自由と情熱を!","レッツ・ラ・まぜまぜ!","キュアホイップ!できあがり!","キュアカスタード!できあがり!","キュアジェラート!できあがり!","キュアマカロン!できあがり!","キュアショコラ!できあがり!","キラキラ☆プリキュアアラモード!"]},{"transformers":["Yukari","Ichika","Himari","Aoi","Akira"],"specialItems":[{"a":["CatMacaron"],"i":"SweetsPact"},{"a":["RabbitShortcake"],"i":"SweetsPact"},{"a":["SquirrelPudding"],"i":"SweetsPact"},{"a":["LionIce"],"i":"SweetsPact"},{"a":["DogChocolate"],"i":"SweetsPact"}],"transformees":["CureMacaron","CureWhip","CureCustard","CureGelato","CureChocolat"],"speech":["キュアラモード・デコレーション!","マカロン!","美しさとトキメキを!","レッツ・ラ・まぜまぜ!","キュアホイップ!できあがり!","キュアカスタード!できあがり!","キュアジェラート!できあがり!","キュアマカロン!できあがり!","キュアショコラ!できあがり!","キラキラ☆プリキュアアラモード!"]},{"transformers":["Akira","Ichika","Himari","Aoi","Yukari"],"specialItems":[{"a":["DogChocolate"],"i":"SweetsPact"},{"a":["RabbitShortcake"],"i":"SweetsPact"},{"a":["SquirrelPudding"],"i":"SweetsPact"},{"a":["LionIce"],"i":"SweetsPact"},{"a":["CatMacaron"],"i":"SweetsPact"}],"transformees":["CureChocolat","CureWhip","CureCustard","CureGelato","CureMacaron"],"speech":["キュアラモード・デコレーション!","チョコレート!","強さと愛を!","レッツ・ラ・まぜまぜ!","キュアホイップ!できあがり!","キュアカスタード!できあがり!","キュアジェラート!できあがり!","キュアマカロン!できあがり!","キュアショコラ!できあがり!","キラキラ☆プリキュアアラモード!"]},{"transformers":["Ciel","Ichika","Himari","Aoi","Yukari","Akira"],"specialItems":[{"a":["PegasusParfait"],"i":"SweetsPact"},{"a":["RabbitShortcake"],"i":"SweetsPact"},{"a":["SquirrelPudding"],"i":"SweetsPact"},{"a":["LionIce"],"i":"SweetsPact"},{"a":["CatMacaron"],"i":"SweetsPact"},{"a":["DogChocolate"],"i":"SweetsPact"}],"transformees":["CureParfait","CureWhip","CureCustard","CureGelato","CureMacaron","CureChocolat"],"speech":["キュアラモード・デコレーション!","パフェ!","夢と希望を!","レッツ・ラ・まぜまぜ!","キュアホイップ!できあがり!","キュアカスタード!できあがり!","キュアジェラート!できあがり!","キュアマカロン!できあがり!","キュアショコラ!できあがり!","キュアパルフェ!できあがり!","キラキラ☆プリキュアアラモード!"]},{"transformers":["Ichika","Himari","Aoi"],"specialItems":[{"a":["RabbitShortcake"],"i":"SweetsPact"},{"a":["SquirrelPudding"],"i":"SweetsPact"},{"a":["LionIce"],"i":"SweetsPact"}],"transformees":["CureWhip","CureCustard","CureGelato"],"speech":["キュアラモード・デコレーション!","ショートケーキ!","元気と笑顔を!","レッツ・ラ・まぜまぜ!","キュアホイップ!できあがり!","キュアカスタード!できあがり!","キュアジェラート!できあがり!"]},{"transformers":["Ichika","Himari","Aoi","Yukari"],"specialItems":[{"a":["RabbitShortcake"],"i":"SweetsPact"},{"a":["SquirrelPudding"],"i":"SweetsPact"},{"a":["LionIce"],"i":"SweetsPact"},{"a":["CatMacaron"],"i":"SweetsPact"}],"transformees":["CureWhip","CureCustard","CureGelato","CureMacaron"],"speech":["キュアラモード・デコレーション!","ショートケーキ!","元気と笑顔を!","レッツ・ラ・まぜまぜ!","キュアホイップ!できあがり!","キュアカスタード!できあがり!","キュアジェラート!できあがり!","キュアマカロン!できあがり!"]},{"transformers":["Yukari","Akira"],"specialItems":[{"a":["CatMacaron"],"i":"SweetsPact"},{"a":["DogChocolate"],"i":"SweetsPact"}],"transformees":["CureMacaron","CureChocolat"],"speech":["キュアラモード・デコレーション!","マカロン!","美しさとトキメキを!","レッツ・ラ・まぜまぜ!","キュアマカロン!できあがり!","キュアショコラ!できあがり!"]}],"purifications":[{"purifier":["CureWhip"],"specialItems":["CandyRod"],"speech":["キラキラキラルン!","ホイップ・デコレーション!"]},{"purifier":["CureCustard"],"specialItems":["CandyRod"],"speech":["キラキラキラルン!","カスタード・イリュージョン!"]},{"purifier":["CureGelato"],"specialItems":["CandyRod"],"speech":["キラキラキラルン!","ジェラート・シェイク!"]},{"purifier":["CureMacaron"],"specialItems":["CandyRod"],"speech":["キラキラキラルン!","マカロン・ジュリエンヌ!","にゃーお♥"]},{"purifier":["CureChocolat"],"specialItems":["CandyRod"],"speech":["キラキラキラルン!","ショコラ・アロマーゼ!"]},{"purifier":["CureParfait"],"specialItems":["RainbowRibbon"],"speech":["レインボーリボン!","行くよ!アン・ドゥ・トレビアン!","キラクル・レインボー!","ボナペティ!"]},{"purifier":["CureWhip","CureCustard","CureGelato","CureMacaron","CureChocolat"],"specialItems":["CandyRod"],"speech":["キャンディーロッド!","キラキラキラル・フルチャージ!","スイー・ツー・ワンダフル・アラモード!"]},{"purifier":["CureWhip","CureCustard","CureGelato","CureMacaron","CureChocolat","CureParfait"],"specialItems":[{"a":["CrystalAnimalRabbit"],"i":"KirakiraruCreamer"},{"a":["CrystalAnimalSquirrel"],"i":"KirakiraruCreamer"},{"a":["CrystalAnimalLion"],"i":"KirakiraruCreamer"},{"a":["CrystalAnimalCat"],"i":"KirakiraruCreamer"},{"a":["CrystalAnimalDog"],"i":"KirakiraruCreamer"},{"a":["CrystalAnimalPegasus"],"i":"KirakiraruCreamer"}],"speech":["キラキラルクリーマー!","キラッと輝け!クリスタルアニマル!","ぴょーん!","くるるっ!","がぁおー!","にゃーお!","わん!","ぱたた!","プリキュア・アニマルゴーランド!"]}]}
+ gen/pretty-cure-index.json view
@@ -0,0 +1,1034 @@+{+    "specialItems": [+        {+            "nameEn": "Sweets Pact",+            "attachments": [+                "Animal Sweets"+            ],+            "nameJa": "スイーツパクト",+            "id": "SweetsPact"+        },+        {+            "nameEn": "Rabbit Shortcake",+            "attachments": [],+            "nameJa": "うさぎショートケーキ",+            "id": "RabbitShortcake"+        },+        {+            "nameEn": "Squirrel Pudding",+            "attachments": [],+            "nameJa": "りすプリン",+            "id": "SquirrelPudding"+        },+        {+            "nameEn": "Lion Ice",+            "attachments": [],+            "nameJa": "らいおんアイス",+            "id": "LionIce"+        },+        {+            "nameEn": "Cat Macaron",+            "attachments": [],+            "nameJa": "ねこマカロン",+            "id": "CatMacaron"+        },+        {+            "nameEn": "Dog Chocolate",+            "attachments": [],+            "nameJa": "いぬチョコレート",+            "id": "DogChocolate"+        },+        {+            "nameEn": "Pegasus Parfait",+            "attachments": [],+            "nameJa": "ペガサスパフェ",+            "id": "PegasusParfait"+        },+        {+            "nameEn": "Candy Rod",+            "attachments": [],+            "nameJa": "キャンディロッド",+            "id": "CandyRod"+        },+        {+            "nameEn": "Rainbow Ribbon",+            "attachments": [],+            "nameJa": "レインボーリボン",+            "id": "RainbowRibbon"+        },+        {+            "nameEn": "Kirakiraru Creamer",+            "attachments": [+                "Crystal Animal"+            ],+            "nameJa": "キラキラルクリーマー",+            "id": "KirakiraruCreamer"+        },+        {+            "nameEn": "Crystal Animal Rabbit",+            "attachments": [],+            "nameJa": "クリスタルアニマルうさぎ",+            "id": "CrystalAnimalRabbit"+        },+        {+            "nameEn": "Crystal Animal Squirrel",+            "attachments": [],+            "nameJa": "クリスタルアニマルりす",+            "id": "CrystalAnimalSquirrel"+        },+        {+            "nameEn": "Crystal Animal Lion",+            "attachments": [],+            "nameJa": "クリスタルアニマルらいおん",+            "id": "CrystalAnimalLion"+        },+        {+            "nameEn": "Crystal Animal Cat",+            "attachments": [],+            "nameJa": "クリスタルアニマルねこ",+            "id": "CrystalAnimalCat"+        },+        {+            "nameEn": "Crystal Animal Dog",+            "attachments": [],+            "nameJa": "クリスタルアニマルいぬ",+            "id": "CrystalAnimalDog"+        },+        {+            "nameEn": "Crystal Animal Pegasus",+            "attachments": [],+            "nameJa": "クリスタルアニマルペガサス",+            "id": "CrystalAnimalPegasus"+        }+    ],+    "transformees": [+        {+            "nameEn": "Cure Whip",+            "nameJa": "キュアホイップ",+            "id": "CureWhip",+            "introducesHerselfAs": "ショートケーキ!元気と笑顔を!レッツ・ラ・まぜまぜ!キュアホイップ!できあがり!",+            "variation": ""+        },+        {+            "nameEn": "Cure Custard",+            "nameJa": "キュアカスタード",+            "id": "CureCustard",+            "introducesHerselfAs": "プリン!知性と勇気を!レッツ・ラ・まぜまぜ!キュアカスタード!できあがり!",+            "variation": ""+        },+        {+            "nameEn": "Cure Gelato",+            "nameJa": "キュアジェラート",+            "id": "CureGelato",+            "introducesHerselfAs": "アイス!自由と情熱を!レッツ・ラ・まぜまぜ!キュアジェラート!できあがり!",+            "variation": ""+        },+        {+            "nameEn": "Cure Macaron",+            "nameJa": "キュアマカロン",+            "id": "CureMacaron",+            "introducesHerselfAs": "マカロン!美しさとトキメキを!レッツ・ラ・まぜまぜ!キュアマカロン!できあがり!",+            "variation": ""+        },+        {+            "nameEn": "Cure Chocolat",+            "nameJa": "キュアショコラ",+            "id": "CureChocolat",+            "introducesHerselfAs": "チョコレート!強さと愛を!レッツ・ラ・まぜまぜ!キュアショコラ!できあがり!",+            "variation": ""+        },+        {+            "nameEn": "Cure Parfait",+            "nameJa": "キュアパルフェ",+            "id": "CureParfait",+            "introducesHerselfAs": "パフェ!夢と希望を!レッツ・ラ・まぜまぜ!キュアパルフェ!できあがり!",+            "variation": ""+        }+    ],+    "girls": [+        {+            "nameEn": "Ichika Usami",+            "nameJa": "宇佐美 いちか",+            "id": "Ichika"+        },+        {+            "nameEn": "Himari Arisugawa",+            "nameJa": "有栖川 ひまり",+            "id": "Himari"+        },+        {+            "nameEn": "Aoi Tategami",+            "nameJa": "立神 あおい",+            "id": "Aoi"+        },+        {+            "nameEn": "Yukari Kotozume",+            "nameJa": "琴爪 ゆかり",+            "id": "Yukari"+        },+        {+            "nameEn": "Akira Kenjo",+            "nameJa": "剣城 あきら",+            "id": "Akira"+        },+        {+            "nameEn": "Ciel Kirahoshi",+            "nameJa": "キラ星 シエル",+            "id": "Ciel"+        }+    ],+    "purifications": [+        {+            "specialItems": [+                "CandyRod"+            ],+            "speech": [+                "キラキラキラルン!",+                "ホイップ・デコレーション!"+            ],+            "purifier": [+                "CureWhip"+            ]+        },+        {+            "specialItems": [+                "CandyRod"+            ],+            "speech": [+                "キラキラキラルン!",+                "カスタード・イリュージョン!"+            ],+            "purifier": [+                "CureCustard"+            ]+        },+        {+            "specialItems": [+                "CandyRod"+            ],+            "speech": [+                "キラキラキラルン!",+                "ジェラート・シェイク!"+            ],+            "purifier": [+                "CureGelato"+            ]+        },+        {+            "specialItems": [+                "CandyRod"+            ],+            "speech": [+                "キラキラキラルン!",+                "マカロン・ジュリエンヌ!",+                "にゃーお♥"+            ],+            "purifier": [+                "CureMacaron"+            ]+        },+        {+            "specialItems": [+                "CandyRod"+            ],+            "speech": [+                "キラキラキラルン!",+                "ショコラ・アロマーゼ!"+            ],+            "purifier": [+                "CureChocolat"+            ]+        },+        {+            "specialItems": [+                "RainbowRibbon"+            ],+            "speech": [+                "レインボーリボン!",+                "行くよ!アン・ドゥ・トレビアン!",+                "キラクル・レインボー!",+                "ボナペティ!"+            ],+            "purifier": [+                "CureParfait"+            ]+        },+        {+            "specialItems": [+                "CandyRod"+            ],+            "speech": [+                "キャンディーロッド!",+                "キラキラキラル・フルチャージ!",+                "スイー・ツー・ワンダフル・アラモード!"+            ],+            "purifier": [+                "CureWhip",+                "CureCustard",+                "CureGelato",+                "CureMacaron",+                "CureChocolat"+            ]+        },+        {+            "specialItems": [+                {+                    "a": [+                        "CrystalAnimalRabbit"+                    ],+                    "i": "KirakiraruCreamer"+                },+                {+                    "a": [+                        "CrystalAnimalSquirrel"+                    ],+                    "i": "KirakiraruCreamer"+                },+                {+                    "a": [+                        "CrystalAnimalLion"+                    ],+                    "i": "KirakiraruCreamer"+                },+                {+                    "a": [+                        "CrystalAnimalCat"+                    ],+                    "i": "KirakiraruCreamer"+                },+                {+                    "a": [+                        "CrystalAnimalDog"+                    ],+                    "i": "KirakiraruCreamer"+                },+                {+                    "a": [+                        "CrystalAnimalPegasus"+                    ],+                    "i": "KirakiraruCreamer"+                }+            ],+            "speech": [+                "キラキラルクリーマー!",+                "キラッと輝け!クリスタルアニマル!",+                "ぴょーん!",+                "くるるっ!",+                "がぁおー!",+                "にゃーお!",+                "わん!",+                "ぱたた!",+                "プリキュア・アニマルゴーランド!"+            ],+            "purifier": [+                "CureWhip",+                "CureCustard",+                "CureGelato",+                "CureMacaron",+                "CureChocolat",+                "CureParfait"+            ]+        }+    ],+    "transformations": [+        {+            "specialItems": [+                {+                    "a": [+                        "RabbitShortcake"+                    ],+                    "i": "SweetsPact"+                }+            ],+            "transformees": [+                "CureWhip"+            ],+            "speech": [+                "キュアラモード・デコレーション!",+                "ショートケーキ!",+                "元気と笑顔を!",+                "レッツ・ラ・まぜまぜ!",+                "キュアホイップ!できあがり!"+            ],+            "transformers": [+                "Ichika"+            ]+        },+        {+            "specialItems": [+                {+                    "a": [+                        "SquirrelPudding"+                    ],+                    "i": "SweetsPact"+                }+            ],+            "transformees": [+                "CureCustard"+            ],+            "speech": [+                "キュアラモード・デコレーション!",+                "プリン!",+                "知性と勇気を!",+                "レッツ・ラ・まぜまぜ!",+                "キュアカスタード!できあがり!"+            ],+            "transformers": [+                "Himari"+            ]+        },+        {+            "specialItems": [+                {+                    "a": [+                        "LionIce"+                    ],+                    "i": "SweetsPact"+                }+            ],+            "transformees": [+                "CureGelato"+            ],+            "speech": [+                "キュアラモード・デコレーション!",+                "アイス!",+                "自由と情熱を!",+                "レッツ・ラ・まぜまぜ!",+                "キュアジェラート!できあがり!"+            ],+            "transformers": [+                "Aoi"+            ]+        },+        {+            "specialItems": [+                {+                    "a": [+                        "CatMacaron"+                    ],+                    "i": "SweetsPact"+                }+            ],+            "transformees": [+                "CureMacaron"+            ],+            "speech": [+                "キュアラモード・デコレーション!",+                "マカロン!",+                "美しさとトキメキを!",+                "レッツ・ラ・まぜまぜ!",+                "キュアマカロン!できあがり!"+            ],+            "transformers": [+                "Yukari"+            ]+        },+        {+            "specialItems": [+                {+                    "a": [+                        "DogChocolate"+                    ],+                    "i": "SweetsPact"+                }+            ],+            "transformees": [+                "CureChocolat"+            ],+            "speech": [+                "キュアラモード・デコレーション!",+                "チョコレート!",+                "強さと愛を!",+                "レッツ・ラ・まぜまぜ!",+                "キュアショコラ!できあがり!"+            ],+            "transformers": [+                "Akira"+            ]+        },+        {+            "specialItems": [+                {+                    "a": [+                        "PegasusParfait"+                    ],+                    "i": "SweetsPact"+                }+            ],+            "transformees": [+                "CureParfait"+            ],+            "speech": [+                "キュアラモード・デコレーション!",+                "パフェ!",+                "夢と希望を!",+                "レッツ・ラ・まぜまぜ!",+                "キュアパルフェ!できあがり!"+            ],+            "transformers": [+                "Ciel"+            ]+        },+        {+            "specialItems": [+                {+                    "a": [+                        "RabbitShortcake"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "SquirrelPudding"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "LionIce"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "CatMacaron"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "DogChocolate"+                    ],+                    "i": "SweetsPact"+                }+            ],+            "transformees": [+                "CureWhip",+                "CureCustard",+                "CureGelato",+                "CureMacaron",+                "CureChocolat"+            ],+            "speech": [+                "キュアラモード・デコレーション!",+                "ショートケーキ!",+                "元気と笑顔を!",+                "レッツ・ラ・まぜまぜ!",+                "キュアホイップ!できあがり!",+                "キュアカスタード!できあがり!",+                "キュアジェラート!できあがり!",+                "キュアマカロン!できあがり!",+                "キュアショコラ!できあがり!",+                "キラキラ☆プリキュアアラモード!"+            ],+            "transformers": [+                "Ichika",+                "Himari",+                "Aoi",+                "Yukari",+                "Akira"+            ]+        },+        {+            "specialItems": [+                {+                    "a": [+                        "RabbitShortcake"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "SquirrelPudding"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "LionIce"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "CatMacaron"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "DogChocolate"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "PegasusParfait"+                    ],+                    "i": "SweetsPact"+                }+            ],+            "transformees": [+                "CureWhip",+                "CureCustard",+                "CureGelato",+                "CureMacaron",+                "CureChocolat",+                "CureParfait"+            ],+            "speech": [+                "キュアラモード・デコレーション!",+                "ショートケーキ!",+                "元気と笑顔を!",+                "レッツ・ラ・まぜまぜ!",+                "キュアホイップ!できあがり!",+                "キュアカスタード!できあがり!",+                "キュアジェラート!できあがり!",+                "キュアマカロン!できあがり!",+                "キュアショコラ!できあがり!",+                "キュアパルフェ!できあがり!",+                "キラキラ☆プリキュアアラモード!"+            ],+            "transformers": [+                "Ichika",+                "Himari",+                "Aoi",+                "Yukari",+                "Akira",+                "Ciel"+            ]+        },+        {+            "specialItems": [+                {+                    "a": [+                        "SquirrelPudding"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "RabbitShortcake"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "LionIce"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "CatMacaron"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "DogChocolate"+                    ],+                    "i": "SweetsPact"+                }+            ],+            "transformees": [+                "CureCustard",+                "CureWhip",+                "CureGelato",+                "CureMacaron",+                "CureChocolat"+            ],+            "speech": [+                "キュアラモード・デコレーション!",+                "プリン!",+                "知性と勇気を!",+                "レッツ・ラ・まぜまぜ!",+                "キュアホイップ!できあがり!",+                "キュアカスタード!できあがり!",+                "キュアジェラート!できあがり!",+                "キュアマカロン!できあがり!",+                "キュアショコラ!できあがり!",+                "キラキラ☆プリキュアアラモード!"+            ],+            "transformers": [+                "Himari",+                "Ichika",+                "Aoi",+                "Yukari",+                "Akira"+            ]+        },+        {+            "specialItems": [+                {+                    "a": [+                        "LionIce"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "RabbitShortcake"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "SquirrelPudding"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "CatMacaron"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "DogChocolate"+                    ],+                    "i": "SweetsPact"+                }+            ],+            "transformees": [+                "CureGelato",+                "CureWhip",+                "CureCustard",+                "CureMacaron",+                "CureChocolat"+            ],+            "speech": [+                "キュアラモード・デコレーション!",+                "アイス!",+                "自由と情熱を!",+                "レッツ・ラ・まぜまぜ!",+                "キュアホイップ!できあがり!",+                "キュアカスタード!できあがり!",+                "キュアジェラート!できあがり!",+                "キュアマカロン!できあがり!",+                "キュアショコラ!できあがり!",+                "キラキラ☆プリキュアアラモード!"+            ],+            "transformers": [+                "Aoi",+                "Ichika",+                "Himari",+                "Yukari",+                "Akira"+            ]+        },+        {+            "specialItems": [+                {+                    "a": [+                        "CatMacaron"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "RabbitShortcake"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "SquirrelPudding"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "LionIce"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "DogChocolate"+                    ],+                    "i": "SweetsPact"+                }+            ],+            "transformees": [+                "CureMacaron",+                "CureWhip",+                "CureCustard",+                "CureGelato",+                "CureChocolat"+            ],+            "speech": [+                "キュアラモード・デコレーション!",+                "マカロン!",+                "美しさとトキメキを!",+                "レッツ・ラ・まぜまぜ!",+                "キュアホイップ!できあがり!",+                "キュアカスタード!できあがり!",+                "キュアジェラート!できあがり!",+                "キュアマカロン!できあがり!",+                "キュアショコラ!できあがり!",+                "キラキラ☆プリキュアアラモード!"+            ],+            "transformers": [+                "Yukari",+                "Ichika",+                "Himari",+                "Aoi",+                "Akira"+            ]+        },+        {+            "specialItems": [+                {+                    "a": [+                        "DogChocolate"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "RabbitShortcake"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "SquirrelPudding"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "LionIce"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "CatMacaron"+                    ],+                    "i": "SweetsPact"+                }+            ],+            "transformees": [+                "CureChocolat",+                "CureWhip",+                "CureCustard",+                "CureGelato",+                "CureMacaron"+            ],+            "speech": [+                "キュアラモード・デコレーション!",+                "チョコレート!",+                "強さと愛を!",+                "レッツ・ラ・まぜまぜ!",+                "キュアホイップ!できあがり!",+                "キュアカスタード!できあがり!",+                "キュアジェラート!できあがり!",+                "キュアマカロン!できあがり!",+                "キュアショコラ!できあがり!",+                "キラキラ☆プリキュアアラモード!"+            ],+            "transformers": [+                "Akira",+                "Ichika",+                "Himari",+                "Aoi",+                "Yukari"+            ]+        },+        {+            "specialItems": [+                {+                    "a": [+                        "PegasusParfait"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "RabbitShortcake"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "SquirrelPudding"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "LionIce"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "CatMacaron"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "DogChocolate"+                    ],+                    "i": "SweetsPact"+                }+            ],+            "transformees": [+                "CureParfait",+                "CureWhip",+                "CureCustard",+                "CureGelato",+                "CureMacaron",+                "CureChocolat"+            ],+            "speech": [+                "キュアラモード・デコレーション!",+                "パフェ!",+                "夢と希望を!",+                "レッツ・ラ・まぜまぜ!",+                "キュアホイップ!できあがり!",+                "キュアカスタード!できあがり!",+                "キュアジェラート!できあがり!",+                "キュアマカロン!できあがり!",+                "キュアショコラ!できあがり!",+                "キュアパルフェ!できあがり!",+                "キラキラ☆プリキュアアラモード!"+            ],+            "transformers": [+                "Ciel",+                "Ichika",+                "Himari",+                "Aoi",+                "Yukari",+                "Akira"+            ]+        },+        {+            "specialItems": [+                {+                    "a": [+                        "RabbitShortcake"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "SquirrelPudding"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "LionIce"+                    ],+                    "i": "SweetsPact"+                }+            ],+            "transformees": [+                "CureWhip",+                "CureCustard",+                "CureGelato"+            ],+            "speech": [+                "キュアラモード・デコレーション!",+                "ショートケーキ!",+                "元気と笑顔を!",+                "レッツ・ラ・まぜまぜ!",+                "キュアホイップ!できあがり!",+                "キュアカスタード!できあがり!",+                "キュアジェラート!できあがり!"+            ],+            "transformers": [+                "Ichika",+                "Himari",+                "Aoi"+            ]+        },+        {+            "specialItems": [+                {+                    "a": [+                        "RabbitShortcake"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "SquirrelPudding"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "LionIce"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "CatMacaron"+                    ],+                    "i": "SweetsPact"+                }+            ],+            "transformees": [+                "CureWhip",+                "CureCustard",+                "CureGelato",+                "CureMacaron"+            ],+            "speech": [+                "キュアラモード・デコレーション!",+                "ショートケーキ!",+                "元気と笑顔を!",+                "レッツ・ラ・まぜまぜ!",+                "キュアホイップ!できあがり!",+                "キュアカスタード!できあがり!",+                "キュアジェラート!できあがり!",+                "キュアマカロン!できあがり!"+            ],+            "transformers": [+                "Ichika",+                "Himari",+                "Aoi",+                "Yukari"+            ]+        },+        {+            "specialItems": [+                {+                    "a": [+                        "CatMacaron"+                    ],+                    "i": "SweetsPact"+                },+                {+                    "a": [+                        "DogChocolate"+                    ],+                    "i": "SweetsPact"+                }+            ],+            "transformees": [+                "CureMacaron",+                "CureChocolat"+            ],+            "speech": [+                "キュアラモード・デコレーション!",+                "マカロン!",+                "美しさとトキメキを!",+                "レッツ・ラ・まぜまぜ!",+                "キュアマカロン!できあがり!",+                "キュアショコラ!できあがり!"+            ],+            "transformers": [+                "Yukari",+                "Akira"+            ]+        }+    ]+}
+ src/ACME/PreCure/Index.hs view
@@ -0,0 +1,63 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}++module ACME.PreCure.Index where+++import           Control.Monad+                   ( forM+                   )+import           Data.Aeson+                   ( encode+                   )+import           Data.Aeson.Encode.Pretty+                   ( encodePretty+                   )+import           Data.Data+                   ( Data+                   )+import qualified Data.ByteString.Lazy as ByteString+import           Language.Haskell.TH+                   ( Q+                   , thisModule+                   , runIO+                   , tupE+                   )+import           Language.Haskell.TH.Syntax+                   ( Module+                   )++import           ACME.PreCure.Textbook ()+import           ACME.PreCure.Index.Lib+import           ACME.PreCure.Index.Types+++writeCureIndexJson :: ()+writeCureIndexJson =+  $( do+        textbookRootMod <-+          fmap (head . filter isTextbookMod) . loadImportedModules =<< thisModule :: Q Module+        -- ^ ACME.PreCure.Textbook++        modsImportedByRoot <- loadImportedModules textbookRootMod :: Q [Module]++        textbookMods <-+            fmap (filter isTextbookMod . concat) $ mapM loadImportedModules modsImportedByRoot :: Q [Module]+          -- ^ ACME.PreCure.Textbook.*++        let collectAnnotationsFromEachSeriesModules :: Data a => Q [a]+            collectAnnotationsFromEachSeriesModules =+              fmap concat $ forM textbookMods $ \eachSeriesMod {- ACME.PreCure.Textbook.*.* -} ->+                concat <$> loadAnnotations eachSeriesMod++        gs <- collectAnnotationsFromEachSeriesModules+        ts <- collectAnnotationsFromEachSeriesModules+        is <- collectAnnotationsFromEachSeriesModules+        trs <- collectAnnotationsFromEachSeriesModules+        prs <- collectAnnotationsFromEachSeriesModules++        let index = mkIndex gs ts is trs prs+        runIO $ ByteString.writeFile "gen/cure-index.json" $ encode index+        runIO $ ByteString.writeFile "gen/pretty-cure-index.json" $ encodePretty index+        tupE []+    )
+ src/ACME/PreCure/Index/Lib.hs view
@@ -0,0 +1,69 @@+module ACME.PreCure.Index.Lib+  ( loadImportedModules+  , isTextbookMod+  , loadAnnotations+  , deriveToJsonWithoutTypeNamePrefix+  )+where+++import           Data.Aeson.TH+                   ( deriveToJSON+                   )+import qualified Data.Aeson as Json+import           Data.Aeson.Types+                   ( Options(fieldLabelModifier)+                   )+import           Data.Char+                   ( toLower+                   )+import           Data.Data+                   ( Data+                   )+import           Data.List+                   ( isPrefixOf+                   )+import           Language.Haskell.TH+                   ( AnnLookup(AnnLookupModule)+                   , ModuleInfo(ModuleInfo)+                   , Name+                   , Dec+                   , Q+                   , reifyAnnotations+                   , reifyModule+                   , nameBase+                   )+import           Language.Haskell.TH.Syntax+                   ( Module(Module)+                   , ModName(ModName)+                   )+++loadImportedModules :: Module -> Q [Module]+loadImportedModules = fmap getImportedModules . reifyModule+++isTextbookMod :: Module -> Bool+isTextbookMod = ("ACME.PreCure.Textbook" `isPrefixOf`) . getModName+++loadAnnotations ::  Data a => Module -> Q [a]+loadAnnotations = reifyAnnotations . AnnLookupModule+++getModName :: Module -> String+getModName (Module _ (ModName modName)) = modName+++getImportedModules :: ModuleInfo -> [Module]+getImportedModules (ModuleInfo mods) = mods+++deriveToJsonWithoutTypeNamePrefix :: Name -> Q [Dec]+deriveToJsonWithoutTypeNamePrefix name =+  deriveToJSON Json.defaultOptions { fieldLabelModifier = firstLower . drop (length $ nameBase name) } name+++firstLower :: String -> String+firstLower (x:xs) = toLower x : xs+firstLower _ = error "firstLower: Assertion failed: empty string"
+ src/ACME/PreCure/Index/Types.hs view
@@ -0,0 +1,144 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TemplateHaskell #-}+{-# OPTIONS_GHC -fno-warn-unused-top-binds #-}++module ACME.PreCure.Index.Types+  ( Girl(Girl)+  , Transformee(Transformee)+  , SpecialItem(SpecialItem)+  , IdAttachments(IdAttachments)+  , Transformation(Transformation)+  , Purification(Purification)+  , Index+  , mkGirl+  , mkTransformee+  , mkSpecialItem+  , mkIA+  , mkTransformation+  , mkPurification+  , mkIndex+  ) where++import           Data.Aeson+                   ( ToJSON+                   , toJSON+                   , object+                   , (.=)+                   )+import           Data.Data+                   ( Data+                   )+import           Data.String+                   ( IsString+                   , fromString+                   )++import           ACME.PreCure.Index.Lib+++-- | Pair of the Girl data type name and their name+data Girl =+  Girl { girlId :: String, girlNameEn :: String, girlNameJa :: String }+    deriving (Eq, Show, Data)++$(deriveToJsonWithoutTypeNamePrefix ''Girl)++mkGirl :: String -> String -> Girl+mkGirl ne = Girl (head $ words ne) ne+++data Transformee =+  Transformee+    { transformedId :: String+    , transformedNameEn :: String+    , transformedNameJa :: String+    , transformedIntroducesHerselfAs :: String+    , transformedVariation :: String+    } deriving (Eq, Show, Data)++$(deriveToJsonWithoutTypeNamePrefix ''Transformee)++mkTransformee :: String -> String -> String -> String -> Transformee+mkTransformee ne = Transformee (concat $ words ne) ne+++data SpecialItem =+  SpecialItem+    { specialItemId :: String+    , specialItemNameEn :: String+    , specialItemNameJa :: String+    , specialItemAttachments :: [String]+    } deriving (Eq, Show, Data)++$(deriveToJsonWithoutTypeNamePrefix ''SpecialItem)++mkSpecialItem :: String -> String -> [String] -> SpecialItem+mkSpecialItem ne = SpecialItem (concat $ words ne) ne+++data IdAttachments =+  IdAttachments+    { idAttachementsI :: String+    , idAttachementsA :: [IdAttachments]+    } deriving (Eq, Show, Data)++instance ToJSON IdAttachments where+  toJSON (IdAttachments i []) = toJSON i+  toJSON (IdAttachments i a) =+    object ["i" .= toJSON i, "a" .= toJSON a]++instance IsString IdAttachments where+  fromString s = mkIA s []+++mkIA :: String -> [IdAttachments] -> IdAttachments+mkIA = IdAttachments+++data Transformation =+  Transformation+    { transformationTransformers :: [IdAttachments]+    , transformationSpecialItems :: [IdAttachments]+    , transformationTransformees :: [String]+    , transformationSpeech :: [String]+    } deriving (Eq, Show, Data)++$(deriveToJsonWithoutTypeNamePrefix ''Transformation)++mkTransformation :: [IdAttachments] -> [IdAttachments] -> [String] -> [String] -> Transformation+mkTransformation = Transformation+++data Purification =+  Purification+    { purificationPurifier :: [IdAttachments]+    , purificationSpecialItems :: [IdAttachments]+    , purificationSpeech :: [String]+    } deriving (Eq, Show, Data)++$(deriveToJsonWithoutTypeNamePrefix ''Purification)++mkPurification :: [IdAttachments] -> [IdAttachments] -> [String] -> Purification+mkPurification = Purification+++data Index =+  Index+    { indexGirls :: [Girl]+    , indexTransformees :: [Transformee]+    , indexSpecialItems :: [SpecialItem]+    , indexTransformations :: [Transformation]+    , indexPurifications :: [Purification]+    } deriving (Eq, Show)++$(deriveToJsonWithoutTypeNamePrefix ''Index)++mkIndex+  :: [Girl]+  -> [Transformee]+  -> [SpecialItem]+  -> [Transformation]+  -> [Purification]+  -> Index+mkIndex = Index
− src/ACME/PreCure/Textbook/KirakiraALaMode/Instances.hs
@@ -1,105 +0,0 @@-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE TemplateHaskell #-}-{-# LANGUAGE TypeFamilies #-}-{-# OPTIONS_GHC -fno-warn-orphans #-}--module ACME.PreCure.Textbook.KirakiraALaMode.Instances where---import           ACME.PreCure.Types.TH--import           ACME.PreCure.Textbook.KirakiraALaMode.Types-import           ACME.PreCure.Textbook.KirakiraALaMode.Words---transformationInstance [t| Ichika |] [t| SweetsPact RabbitShortcake |] [t| CureWhip |] [| CureWhip |] (cureALaModeDecoration : introducesHerselfAs_CureWhip)-transformationInstance [t| Himari |] [t| SweetsPact SquirrelPudding |] [t| CureCustard |] [| CureCustard |] (cureALaModeDecoration : introducesHerselfAs_CureCustard)-transformationInstance [t| Aoi |] [t| SweetsPact LionIce |] [t| CureGelato |] [| CureGelato |] (cureALaModeDecoration : introducesHerselfAs_CureGelato)-transformationInstance [t| Yukari |] [t| SweetsPact CatMacaron |] [t| CureMacaron |] [| CureMacaron |] (cureALaModeDecoration : introducesHerselfAs_CureMacaron)-transformationInstance [t| Akira |] [t| SweetsPact DogChocolate |] [t| CureChocolat |] [| CureChocolat |] (cureALaModeDecoration : introducesHerselfAs_CureChocolat)--transformationInstance-  [t| (Ichika, Himari, Aoi, Yukari, Akira) |]-  [t| (SweetsPact RabbitShortcake, SweetsPact SquirrelPudding, SweetsPact LionIce, SweetsPact CatMacaron, SweetsPact DogChocolate) |]-  [t| (CureWhip, CureCustard, CureGelato, CureMacaron, CureChocolat) |]-  [| (CureWhip, CureCustard, CureGelato, CureMacaron, CureChocolat) |]-  (kirakiraALaModeTransformationSpeechFeaturing introducesHerselfAs_CureWhip)--transformationInstance-  [t| (Himari, Ichika, Aoi, Yukari, Akira) |]-  [t| (SweetsPact SquirrelPudding, SweetsPact RabbitShortcake, SweetsPact LionIce, SweetsPact CatMacaron, SweetsPact DogChocolate) |]-  [t| (CureCustard, CureWhip, CureGelato, CureMacaron, CureChocolat) |]-  [| (CureCustard, CureWhip, CureGelato, CureMacaron, CureChocolat) |]-  (kirakiraALaModeTransformationSpeechFeaturing introducesHerselfAs_CureCustard)--transformationInstance-  [t| (Aoi, Ichika, Himari, Yukari, Akira) |]-  [t| (SweetsPact LionIce, SweetsPact RabbitShortcake, SweetsPact SquirrelPudding, SweetsPact CatMacaron, SweetsPact DogChocolate) |]-  [t| (CureGelato, CureWhip, CureCustard, CureMacaron, CureChocolat) |]-  [| (CureGelato, CureWhip, CureCustard, CureMacaron, CureChocolat) |]-  (kirakiraALaModeTransformationSpeechFeaturing introducesHerselfAs_CureGelato)--transformationInstance-  [t| (Yukari, Ichika, Himari, Aoi, Akira) |]-  [t| (SweetsPact CatMacaron, SweetsPact RabbitShortcake, SweetsPact SquirrelPudding, SweetsPact LionIce, SweetsPact DogChocolate) |]-  [t| (CureMacaron, CureWhip, CureCustard, CureGelato, CureChocolat) |]-  [| (CureMacaron, CureWhip, CureCustard, CureGelato, CureChocolat) |]-  (kirakiraALaModeTransformationSpeechFeaturing introducesHerselfAs_CureMacaron)--transformationInstance-  [t| (Akira, Ichika, Himari, Aoi, Yukari) |]-  [t| (SweetsPact DogChocolate, SweetsPact RabbitShortcake, SweetsPact SquirrelPudding, SweetsPact LionIce, SweetsPact CatMacaron) |]-  [t| (CureChocolat, CureWhip, CureCustard, CureGelato, CureMacaron) |]-  [| (CureChocolat, CureWhip, CureCustard, CureGelato, CureMacaron) |]-  (kirakiraALaModeTransformationSpeechFeaturing introducesHerselfAs_CureChocolat)--transformationInstance-  [t| (Ichika, Himari, Aoi) |]-  [t| (SweetsPact RabbitShortcake, SweetsPact SquirrelPudding, SweetsPact LionIce) |]-  [t| (CureWhip, CureCustard, CureGelato) |]-  [| (CureWhip, CureCustard, CureGelato) |]-  ( kirakiraALaModeTransformationSpeechOf-      [ introducesHerselfAs_CureWhip-      , introducesHerselfAs_CureCustard-      , introducesHerselfAs_CureGelato-      ]-  )--transformationInstance-  [t| (Ichika, Himari, Aoi, Yukari) |]-  [t| (SweetsPact RabbitShortcake, SweetsPact SquirrelPudding, SweetsPact LionIce, SweetsPact CatMacaron) |]-  [t| (CureWhip, CureCustard, CureGelato, CureMacaron) |]-  [| (CureWhip, CureCustard, CureGelato, CureMacaron) |]-  ( kirakiraALaModeTransformationSpeechOf-      [ introducesHerselfAs_CureWhip-      , introducesHerselfAs_CureCustard-      , introducesHerselfAs_CureGelato-      , introducesHerselfAs_CureMacaron-      ]-  )--transformationInstance-  [t| (Yukari, Akira) |]-  [t| (SweetsPact CatMacaron, SweetsPact DogChocolate) |]-  [t| (CureMacaron, CureChocolat) |]-  [| (CureMacaron, CureChocolat) |]-  ( kirakiraALaModeTransformationSpeechOf-      [ introducesHerselfAs_CureMacaron-      , introducesHerselfAs_CureChocolat-      ]-  )--purificationInstance [t| CureWhip |]     [t| CandyRod |] ["キラキラキラルン!", "ホイップ・デコレーション!"]-purificationInstance [t| CureCustard |]  [t| CandyRod |] ["キラキラキラルン!", "カスタード・イリュージョン!"]-purificationInstance [t| CureGelato |]   [t| CandyRod |] ["キラキラキラルン!", "ジェラート・シェイク!"]-purificationInstance [t| CureMacaron |]  [t| CandyRod |] ["キラキラキラルン!", "マカロン・ジュリエンヌ!", "にゃーお♥"]-purificationInstance [t| CureChocolat |] [t| CandyRod |] ["キラキラキラルン!", "ショコラ・アロマーゼ!"]--purificationInstance-  [t| (CureWhip, CureCustard, CureGelato, CureMacaron, CureChocolat) |]-  [t| CandyRod |]-  [ "キャンディーロッド!"-  , "キラキラキラル・フルチャージ!"-  , "スイー・ツー・ワンダフル・アラモード!"-  ]
+ src/ACME/PreCure/Textbook/KirakiraALaMode/Profiles.hs view
@@ -0,0 +1,203 @@+{-# OPTIONS_GHC -fno-warn-missing-signatures #-}+{-# LANGUAGE OverloadedStrings #-}++module ACME.PreCure.Textbook.KirakiraALaMode.Profiles where++import           ACME.PreCure.Index.Types+++girls :: [Girl]+girls =+  [ mkGirl "Ichika Usami" "宇佐美 いちか"+  , mkGirl "Himari Arisugawa" "有栖川 ひまり"+  , mkGirl "Aoi Tategami" "立神 あおい"+  , mkGirl "Yukari Kotozume" "琴爪 ゆかり"+  , mkGirl "Akira Kenjo" "剣城 あきら"+  , mkGirl "Ciel Kirahoshi" "キラ星 シエル" -- TODO: Synonym for Kirarin+  ]+++transformees :: [Transformee]+transformees =+  [ mkTransformee "Cure Whip" "キュアホイップ" (concat introducesHerselfAs_CureWhip) ""+  , mkTransformee "Cure Custard" "キュアカスタード" (concat introducesHerselfAs_CureCustard) ""+  , mkTransformee "Cure Gelato" "キュアジェラート" (concat introducesHerselfAs_CureGelato) ""+  , mkTransformee "Cure Macaron" "キュアマカロン" (concat introducesHerselfAs_CureMacaron) ""+  , mkTransformee "Cure Chocolat" "キュアショコラ" (concat introducesHerselfAs_CureChocolat) ""+  , mkTransformee "Cure Parfait" "キュアパルフェ" (concat introducesHerselfAs_CureParfait) ""+  ]+++specialItems :: [SpecialItem]+specialItems =+  [ mkSpecialItem "Sweets Pact"        "スイーツパクト"       ["Animal Sweets"]+  , mkSpecialItem "Rabbit Shortcake"   "うさぎショートケーキ" []+  , mkSpecialItem "Squirrel Pudding"   "りすプリン"           []+  , mkSpecialItem "Lion Ice"           "らいおんアイス"       []+  , mkSpecialItem "Cat Macaron"        "ねこマカロン"         []+  , mkSpecialItem "Dog Chocolate"      "いぬチョコレート"     []+  , mkSpecialItem "Pegasus Parfait"    "ペガサスパフェ"       []+  , mkSpecialItem "Candy Rod"          "キャンディロッド"     []+  , mkSpecialItem "Rainbow Ribbon"     "レインボーリボン"     []+  , mkSpecialItem "Kirakiraru Creamer" "キラキラルクリーマー" ["Crystal Animal"]+  , mkSpecialItem "Crystal Animal Rabbit"   "クリスタルアニマルうさぎ"   []+  , mkSpecialItem "Crystal Animal Squirrel" "クリスタルアニマルりす"     []+  , mkSpecialItem "Crystal Animal Lion"     "クリスタルアニマルらいおん" []+  , mkSpecialItem "Crystal Animal Cat"      "クリスタルアニマルねこ"     []+  , mkSpecialItem "Crystal Animal Dog"      "クリスタルアニマルいぬ"     []+  , mkSpecialItem "Crystal Animal Pegasus"  "クリスタルアニマルペガサス" []+  ]+++transformations :: [Transformation]+transformations =+      [ mkTransformation ["Ichika"] [mkIA "SweetsPact" ["RabbitShortcake"]] ["CureWhip"]     (cureALaModeDecoration : introducesHerselfAs_CureWhip)+      , mkTransformation ["Himari"] [mkIA "SweetsPact" ["SquirrelPudding"]] ["CureCustard"]  (cureALaModeDecoration : introducesHerselfAs_CureCustard)+      , mkTransformation ["Aoi"]    [mkIA "SweetsPact" ["LionIce"]]         ["CureGelato"]   (cureALaModeDecoration : introducesHerselfAs_CureGelato)+      , mkTransformation ["Yukari"] [mkIA "SweetsPact" ["CatMacaron"]]      ["CureMacaron"]  (cureALaModeDecoration : introducesHerselfAs_CureMacaron)+      , mkTransformation ["Akira"]  [mkIA "SweetsPact" ["DogChocolate"]]    ["CureChocolat"] (cureALaModeDecoration : introducesHerselfAs_CureChocolat)+      , mkTransformation ["Ciel"]   [mkIA "SweetsPact" ["PegasusParfait"]]  ["CureParfait"]  (cureALaModeDecoration : introducesHerselfAs_CureParfait)+      , mkTransformation+          ["Ichika", "Himari", "Aoi", "Yukari", "Akira"]+          [mkIA "SweetsPact" ["RabbitShortcake"], mkIA "SweetsPact" ["SquirrelPudding"], mkIA "SweetsPact" ["LionIce"], mkIA "SweetsPact" ["CatMacaron"], mkIA "SweetsPact" ["DogChocolate"]]+          ["CureWhip", "CureCustard", "CureGelato", "CureMacaron", "CureChocolat"]+          (kirakiraALaModeTransformationSpeechFeaturing' introducesHerselfAs_CureWhip)+      , mkTransformation+          ["Ichika", "Himari", "Aoi", "Yukari", "Akira", "Ciel"]+          [mkIA "SweetsPact" ["RabbitShortcake"], mkIA "SweetsPact" ["SquirrelPudding"], mkIA "SweetsPact" ["LionIce"], mkIA "SweetsPact" ["CatMacaron"], mkIA "SweetsPact" ["DogChocolate"], mkIA "SweetsPact" ["PegasusParfait"]]+          ["CureWhip", "CureCustard", "CureGelato", "CureMacaron", "CureChocolat", "CureParfait"]+          (kirakiraALaModeTransformationSpeechFeaturing introducesHerselfAs_CureWhip)+      , mkTransformation+          ["Himari", "Ichika", "Aoi", "Yukari", "Akira"]+          [mkIA "SweetsPact" ["SquirrelPudding"], mkIA "SweetsPact" ["RabbitShortcake"], mkIA "SweetsPact" ["LionIce"], mkIA "SweetsPact" ["CatMacaron"], mkIA "SweetsPact" ["DogChocolate"]]+          ["CureCustard", "CureWhip", "CureGelato", "CureMacaron", "CureChocolat"]+          (kirakiraALaModeTransformationSpeechFeaturing' introducesHerselfAs_CureCustard)+      , mkTransformation+          ["Aoi", "Ichika", "Himari", "Yukari", "Akira"]+          [mkIA "SweetsPact" ["LionIce"], mkIA "SweetsPact" ["RabbitShortcake"], mkIA "SweetsPact" ["SquirrelPudding"], mkIA "SweetsPact" ["CatMacaron"], mkIA "SweetsPact" ["DogChocolate"]]+          ["CureGelato", "CureWhip", "CureCustard", "CureMacaron", "CureChocolat"]+          (kirakiraALaModeTransformationSpeechFeaturing' introducesHerselfAs_CureGelato)+      , mkTransformation+          ["Yukari", "Ichika", "Himari", "Aoi", "Akira"]+          [mkIA "SweetsPact" ["CatMacaron"], mkIA "SweetsPact" ["RabbitShortcake"], mkIA "SweetsPact" ["SquirrelPudding"], mkIA "SweetsPact" ["LionIce"], mkIA "SweetsPact" ["DogChocolate"]]+          ["CureMacaron", "CureWhip", "CureCustard", "CureGelato", "CureChocolat"]+          (kirakiraALaModeTransformationSpeechFeaturing' introducesHerselfAs_CureMacaron)+      , mkTransformation+          ["Akira", "Ichika", "Himari", "Aoi", "Yukari"]+          [mkIA "SweetsPact" ["DogChocolate"], mkIA "SweetsPact" ["RabbitShortcake"], mkIA "SweetsPact" ["SquirrelPudding"], mkIA "SweetsPact" ["LionIce"], mkIA "SweetsPact" ["CatMacaron"]]+          ["CureChocolat", "CureWhip", "CureCustard", "CureGelato", "CureMacaron"]+          (kirakiraALaModeTransformationSpeechFeaturing' introducesHerselfAs_CureChocolat)+      , mkTransformation+          ["Ciel", "Ichika", "Himari", "Aoi", "Yukari", "Akira"]+          [mkIA "SweetsPact" ["PegasusParfait"], mkIA "SweetsPact" ["RabbitShortcake"], mkIA "SweetsPact" ["SquirrelPudding"], mkIA "SweetsPact" ["LionIce"], mkIA "SweetsPact" ["CatMacaron"], mkIA "SweetsPact" ["DogChocolate"]]+          ["CureParfait", "CureWhip", "CureCustard", "CureGelato", "CureMacaron", "CureChocolat"]+          (kirakiraALaModeTransformationSpeechFeaturing introducesHerselfAs_CureParfait)+      , mkTransformation+          ["Ichika", "Himari", "Aoi"]+          [mkIA "SweetsPact" ["RabbitShortcake"], mkIA "SweetsPact" ["SquirrelPudding"], mkIA "SweetsPact" ["LionIce"]]+          ["CureWhip", "CureCustard", "CureGelato"]+          ( kirakiraALaModeTransformationSpeechOf+              [ introducesHerselfAs_CureWhip+              , introducesHerselfAs_CureCustard+              , introducesHerselfAs_CureGelato+              ]+          )+      , mkTransformation+          ["Ichika", "Himari", "Aoi", "Yukari"]+          [mkIA "SweetsPact" ["RabbitShortcake"], mkIA "SweetsPact" ["SquirrelPudding"], mkIA "SweetsPact" ["LionIce"], mkIA "SweetsPact" ["CatMacaron"]]+          ["CureWhip", "CureCustard", "CureGelato", "CureMacaron"]+          ( kirakiraALaModeTransformationSpeechOf+              [ introducesHerselfAs_CureWhip+              , introducesHerselfAs_CureCustard+              , introducesHerselfAs_CureGelato+              , introducesHerselfAs_CureMacaron+              ]+          )+      , mkTransformation+          ["Yukari", "Akira"]+          [mkIA "SweetsPact" ["CatMacaron"], mkIA "SweetsPact" ["DogChocolate"]]+          ["CureMacaron", "CureChocolat"]+          ( kirakiraALaModeTransformationSpeechOf+              [ introducesHerselfAs_CureMacaron+              , introducesHerselfAs_CureChocolat+              ]+          )+      ]+++purifications :: [Purification]+purifications =+  [ mkPurification ["CureWhip"]     ["CandyRod"] ["キラキラキラルン!", "ホイップ・デコレーション!"]+  , mkPurification ["CureCustard"]  ["CandyRod"] ["キラキラキラルン!", "カスタード・イリュージョン!"]+  , mkPurification ["CureGelato"]   ["CandyRod"] ["キラキラキラルン!", "ジェラート・シェイク!"]+  , mkPurification ["CureMacaron"]  ["CandyRod"] ["キラキラキラルン!", "マカロン・ジュリエンヌ!", "にゃーお♥"]+  , mkPurification ["CureChocolat"] ["CandyRod"] ["キラキラキラルン!", "ショコラ・アロマーゼ!"]+  -- TODO: Purification Instance of CureParfait and RainbowRibbon overlap!+  -- , mkPurification ["CureParfait"]  ["RainbowRibbon"] ["キラキラキラリン!", "パルフェ・エトワール!"]+  , mkPurification ["CureParfait"]  ["RainbowRibbon"] ["レインボーリボン!", "行くよ!アン・ドゥ・トレビアン!", "キラクル・レインボー!", "ボナペティ!"]+  , mkPurification+      ["CureWhip", "CureCustard", "CureGelato", "CureMacaron", "CureChocolat"]+      ["CandyRod"]+      ["キャンディーロッド!", "キラキラキラル・フルチャージ!", "スイー・ツー・ワンダフル・アラモード!"]+  , mkPurification+      ["CureWhip", "CureCustard", "CureGelato", "CureMacaron", "CureChocolat", "CureParfait"]+      [ mkIA "KirakiraruCreamer" ["CrystalAnimalRabbit"]+      , mkIA "KirakiraruCreamer" ["CrystalAnimalSquirrel"]+      , mkIA "KirakiraruCreamer" ["CrystalAnimalLion"]+      , mkIA "KirakiraruCreamer" ["CrystalAnimalCat"]+      , mkIA "KirakiraruCreamer" ["CrystalAnimalDog"]+      , mkIA "KirakiraruCreamer" ["CrystalAnimalPegasus"]+      ]+      [ "キラキラルクリーマー!"+      , "キラッと輝け!クリスタルアニマル!"+      , "ぴょーん!"+      , "くるるっ!"+      , "がぁおー!"+      , "にゃーお!"+      , "わん!"+      , "ぱたた!"+      , "プリキュア・アニマルゴーランド!"+      ]+  ]+++groupName_KirakiraALaMode = "キラキラ☆プリキュアアラモード"++cureALaModeDecoration = "キュアラモード・デコレーション!"++introducesHerselfAs_CureWhip     = ["ショートケーキ!", "元気と笑顔を!", "レッツ・ラ・まぜまぜ!", "キュアホイップ!できあがり!"]+introducesHerselfAs_CureCustard  = ["プリン!", "知性と勇気を!", "レッツ・ラ・まぜまぜ!", "キュアカスタード!できあがり!"]+introducesHerselfAs_CureGelato   = ["アイス!", "自由と情熱を!", "レッツ・ラ・まぜまぜ!", "キュアジェラート!できあがり!"]+introducesHerselfAs_CureMacaron  = ["マカロン!", "美しさとトキメキを!", "レッツ・ラ・まぜまぜ!", "キュアマカロン!できあがり!"]+introducesHerselfAs_CureChocolat = ["チョコレート!", "強さと愛を!", "レッツ・ラ・まぜまぜ!", "キュアショコラ!できあがり!"]+introducesHerselfAs_CureParfait  = ["パフェ!", "夢と希望を!", "レッツ・ラ・まぜまぜ!", "キュアパルフェ!できあがり!"]++kirakiraALaModeTransformationSpeechOf :: [[String]] -> [String]+kirakiraALaModeTransformationSpeechOf [] = error "No transforamation speech given!"+kirakiraALaModeTransformationSpeechOf al@(first:_) =+  cureALaModeDecoration : init first ++ map last al++kirakiraALaModeTransformationSpeechFeaturing' :: [String] -> [String]+kirakiraALaModeTransformationSpeechFeaturing' first =+  cureALaModeDecoration : init first ++ allDekiagari ++ [groupName_KirakiraALaMode ++ "!"]+  where+    allDekiagari = map last+      [ introducesHerselfAs_CureWhip+      , introducesHerselfAs_CureCustard+      , introducesHerselfAs_CureGelato+      , introducesHerselfAs_CureMacaron+      , introducesHerselfAs_CureChocolat+      ]++kirakiraALaModeTransformationSpeechFeaturing :: [String] -> [String]+kirakiraALaModeTransformationSpeechFeaturing first =+  cureALaModeDecoration : init first ++ allDekiagari ++ [groupName_KirakiraALaMode ++ "!"]+  where+    allDekiagari = map last+      [ introducesHerselfAs_CureWhip+      , introducesHerselfAs_CureCustard+      , introducesHerselfAs_CureGelato+      , introducesHerselfAs_CureMacaron+      , introducesHerselfAs_CureChocolat+      , introducesHerselfAs_CureParfait+      ]
src/ACME/PreCure/Textbook/KirakiraALaMode/Types.hs view
@@ -1,30 +1,26 @@+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TemplateHaskell #-}+{-# OPTIONS_GHC -fno-warn-orphans #-}  module ACME.PreCure.Textbook.KirakiraALaMode.Types where  import           ACME.PreCure.Types.TH -import           ACME.PreCure.Textbook.KirakiraALaMode.Words-+import           ACME.PreCure.Textbook.KirakiraALaMode.Profiles -defineGirl "Ichika" "宇佐美 いちか"-defineGirl "Himari" "有栖川 ひまり"-defineGirl "Aoi" "立神 あおい"-defineGirl "Yukari" "琴爪 ゆかり"-defineGirl "Akira" "剣城 あきら"+{-# ANN module girls #-}+$(declareGirls girls) -defineTransformedDefault "CureWhip" "キュアホイップ" $ concat introducesHerselfAs_CureWhip-defineTransformedDefault "CureCustard" "キュアカスタード" $ concat introducesHerselfAs_CureCustard-defineTransformedDefault "CureGelato" "キュアジェラート" $ concat introducesHerselfAs_CureGelato-defineTransformedDefault "CureMacaron" "キュアマカロン" $ concat introducesHerselfAs_CureMacaron-defineTransformedDefault "CureChocolat" "キュアショコラ" $ concat introducesHerselfAs_CureChocolat+{-# ANN module transformees #-}+$(declareTransformees transformees) -data SweetsPact s = SweetsPact s+{-# ANN module specialItems #-}+$(declareSpecialItems specialItems) -define "RabbitShortcake"-define "SquirrelPudding"-define "LionIce"-define "CatMacaron"-define "DogChocolate"+{-# ANN module transformations #-}+$(declareTransformations transformations) -define "CandyRod"+{-# ANN module purifications #-}+$(declarePurifications purifications)
− src/ACME/PreCure/Textbook/KirakiraALaMode/Words.hs
@@ -1,30 +0,0 @@-{-# OPTIONS_GHC -fno-warn-missing-signatures #-}--module ACME.PreCure.Textbook.KirakiraALaMode.Words where--groupName_KirakiraALaMode = "キラキラ☆プリキュアアラモード"--cureALaModeDecoration = "キュアラモード・デコレーション!"--introducesHerselfAs_CureWhip     = ["ショートケーキ!", "元気と笑顔を!", "レッツ・ラ・まぜまぜ!", "キュアホイップ!できあがり!"]-introducesHerselfAs_CureCustard  = ["プリン!", "知性と勇気を!", "レッツ・ラ・まぜまぜ!", "キュアカスタード!できあがり!"]-introducesHerselfAs_CureGelato   = ["アイス!", "自由と情熱を!", "レッツ・ラ・まぜまぜ!", "キュアジェラート!できあがり!"]-introducesHerselfAs_CureMacaron  = ["マカロン!", "美しさとトキメキを!", "レッツ・ラ・まぜまぜ!", "キュアマカロン!できあがり!"]-introducesHerselfAs_CureChocolat = ["チョコレート!", "強さと愛を!", "レッツ・ラ・まぜまぜ!", "キュアショコラ!できあがり!"]--kirakiraALaModeTransformationSpeechOf :: [[String]] -> [String]-kirakiraALaModeTransformationSpeechOf [] = error "No transforamation speech given!"-kirakiraALaModeTransformationSpeechOf al@(first:_) =-  cureALaModeDecoration : init first ++ map last al--kirakiraALaModeTransformationSpeechFeaturing :: [String] -> [String]-kirakiraALaModeTransformationSpeechFeaturing first =-  cureALaModeDecoration : init first ++ allDekiagari ++ [groupName_KirakiraALaMode ++ "!"]-  where-    allDekiagari = map last-      [ introducesHerselfAs_CureWhip-      , introducesHerselfAs_CureCustard-      , introducesHerselfAs_CureGelato-      , introducesHerselfAs_CureMacaron-      , introducesHerselfAs_CureChocolat-      ]
src/ACME/PreCure/Types/TH.hs view
@@ -1,10 +1,11 @@ {-# LANGUAGE TemplateHaskell #-}  module ACME.PreCure.Types.TH-        ( define-        , defineGirl-        , defineTransformed-        , defineTransformedDefault+        ( declareGirls+        , declareTransformees+        , declareSpecialItems+        , declareTransformations+        , declarePurifications          , girlInstance         , transformedInstance@@ -19,55 +20,108 @@   import           ACME.PreCure.Types+import qualified ACME.PreCure.Index.Types as Index +import           Data.Char+                   ( toLower+                   ) import           Language.Haskell.TH                    ( Name-                   , conT-                   , mkName-                   )-import           Language.Haskell.TH.Compat.Data-                   ( dataD'-                   )-import           Language.Haskell.TH.Lib-                   ( DecsQ                    , DecQ+                   , DecsQ                    , ExpQ                    , TypeQ+                   , Type(VarT, ConT, TupleT)+                   , conE+                   , conT                    , cxt                    , listE+                   , mkName                    , normalC                    , stringE+                   , tupE                    )+import           Language.Haskell.TH.Lib+                   ( StrictTypeQ+                   , plainTV+                   )+import           Language.Haskell.TH.Compat.Data+                   ( dataD'+                   )+import           Language.Haskell.TH.Compat.Strict+                   ( isStrict+                   )+import           TH.Utilities+                   ( appsT+                   ) -singletonDataD :: Name -> DecQ-singletonDataD name =-  dataD' (cxt []) name [] [normalC name []] [''Show, ''Eq] +-- Add type argument names+singletonDataD :: Name -> [Name] -> DecQ+singletonDataD name tyVarNames =+  dataD' (cxt []) name (map plainTV tyVarNames) [normalC name $ map toTypeVar tyVarNames] [''Show, ''Eq] -define :: String -> DecsQ-define string = (:[]) <$> singletonDataD (mkName string) +defineWithTypeVars :: String -> [String] -> DecsQ+defineWithTypeVars string strings =+  (: []) <$> singletonDataD (mkName string) (map mkName strings) ++toTypeVar :: Name -> StrictTypeQ+toTypeVar name = return (isStrict, VarT name)++ defineWith :: Name -> DecsQ -> DecsQ-defineWith name decsq = (:) <$> singletonDataD name <*> decsq+defineWith name decsq = (:) <$> singletonDataD name [] <*> decsq  -defineGirl :: String -> String -> DecsQ-defineGirl string humanN = do-  let name = mkName string-  defineWith name $ girlInstance (conT name) humanN+-- | Declare data types with their Girl instances from the type names and girl names.+declareGirls :: [Index.Girl] -> DecsQ+declareGirls = fmap concat . mapM d+  where+    d (Index.Girl n _e j) = do+      let name = mkName n+      defineWith name $ girlInstance (conT name) j  -defineTransformed :: String -> String -> String -> String -> DecsQ-defineTransformed string cureN intro vari = do-  let name = mkName string-  defineWith name $ transformedInstance (conT name) cureN intro vari+declareTransformees :: [Index.Transformee] -> DecsQ+declareTransformees = fmap concat . mapM d+  where+    d (Index.Transformee n _e j intro vari) = do+      let name = mkName n+      defineWith name $ transformedInstance (conT name) j intro vari  -defineTransformedDefault :: String -> String -> String -> DecsQ-defineTransformedDefault string cureN intro = defineTransformed string cureN intro ""+declareSpecialItems :: [Index.SpecialItem] -> DecsQ+declareSpecialItems = fmap concat . mapM d+  where+    d (Index.SpecialItem n _e _j as) = do+      let aNames = map (firstLower . concat . words) as+      defineWithTypeVars n aNames  +declareTransformations :: [Index.Transformation] -> DecsQ+declareTransformations = fmap concat . mapM d+  where+    d (Index.Transformation tas ias ds s) = do+      transformationInstance+        (tupleTFromIdAttachments tas)+        (tupleTFromIdAttachments ias)+        (tupleT $ map mkName ds)+        (tupleE $ map mkName ds)+        s+++declarePurifications :: [Index.Purification] -> DecsQ+declarePurifications = fmap concat . mapM d+  where+    d (Index.Purification pas ias s) = do+      purificationInstance+        (tupleTFromIdAttachments pas)+        (tupleTFromIdAttachments ias)+        s++ girlInstance :: TypeQ -> String -> DecsQ girlInstance typeq humanN =   [d|@@ -136,3 +190,27 @@     instance NonItemPurification $(p') where       nonItemPurificationSpeech _ = $(listE $ map stringE speech)   |]+++tupleTFromIdAttachments :: [Index.IdAttachments] -> TypeQ+tupleTFromIdAttachments = tupleTBy toAppT+  where+    toAppT :: Index.IdAttachments -> Type+    toAppT (Index.IdAttachments i ias) = appsT (ConT $ mkName i) $ map toAppT ias+++tupleT :: [Name] -> TypeQ+tupleT ns = tupleTBy ConT ns+++tupleTBy :: (a -> Type) -> [a] -> TypeQ+tupleTBy f ns = return $ appsT (TupleT (length ns)) (map f ns)+++tupleE :: [Name] -> ExpQ+tupleE = tupE . map conE+++firstLower :: String -> String+firstLower (x:xs) = toLower x : xs+firstLower _ = error "firstLower: Assertion failed: empty string"
typesafe-precure.cabal view
@@ -1,17 +1,19 @@-name:                typesafe-precure-version:             0.3.1.1-synopsis:            Type-safe transformations and purifications of PreCures (Japanese Battle Heroine)-description:         See README.md for details.-homepage:            https://github.com/igrep/typesafe-precure#readme-license:             BSD3-license-file:        LICENSE-author:              Yuji Yamamoto-maintainer:          whosekiteneverfly@gmail.com-copyright:           2017 Yuji Yamamoto-category:            ACME-build-type:          Simple-extra-source-files:  README.md CHANGELOG.md-cabal-version:       >=1.10+name:                 typesafe-precure+version:              0.4.0.0+synopsis:             Type-safe transformations and purifications of PreCures (Japanese Battle Heroine)+description:          See README.md for details.+homepage:             https://github.com/igrep/typesafe-precure#readme+license:              BSD3+license-file:         LICENSE+author:               Yuji Yamamoto+maintainer:           whosekiteneverfly@gmail.com+copyright:            2017 Yuji Yamamoto+category:             ACME+build-type:           Simple+extra-source-files:   README.md+                      CHANGELOG.md+                      gen/*.json+cabal-version:        >=1.10  library   hs-source-dirs:      src@@ -77,19 +79,28 @@                       , ACME.PreCure.Textbook.KirakiraALaMode +                     , ACME.PreCure.Index+                     , ACME.PreCure.Index.Types+                      , ACME.PreCure.Types                      , ACME.PreCure.Monad   other-modules:       ACME.PreCure.Types.TH-                     , ACME.PreCure.Textbook.KirakiraALaMode.Instances+                     , ACME.PreCure.Index.Lib                      , ACME.PreCure.Textbook.KirakiraALaMode.Types-                     , ACME.PreCure.Textbook.KirakiraALaMode.Words+                     , ACME.PreCure.Textbook.KirakiraALaMode.Profiles   build-depends:       base >= 4.7 && < 5                      -- TODO: specify version+                     , aeson+                     , aeson-pretty                      , autoexporter+                     , bytestring                      , monad-skeleton                      , dlist                      , template-haskell+                     , text                      , th-data-compat+                     , th-strict-compat+                     , th-utilities   default-language:    Haskell2010  test-suite typesafe-precure-test