https://github.com/igrep/typesafe-precure
Type-safe transformations and purifications of PreCures (Japanese battle heroine)
https://github.com/igrep/typesafe-precure
Last synced: 3 months ago
JSON representation
Type-safe transformations and purifications of PreCures (Japanese battle heroine)
- Host: GitHub
- URL: https://github.com/igrep/typesafe-precure
- Owner: igrep
- License: bsd-3-clause
- Created: 2016-12-10T06:58:54.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2025-12-14T07:59:22.000Z (6 months ago)
- Last Synced: 2026-01-29T21:14:13.361Z (5 months ago)
- Language: Haskell
- Homepage: http://hackage.haskell.org/package/typesafe-precure
- Size: 692 KB
- Stars: 23
- Watchers: 1
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# TypeSafe PreCure!!
[](http://hackage.haskell.org/package/typesafe-precure)
[](https://circleci.com/gh/igrep/typesafe-precure)
Type-safe transformations and purifications of PreCures (Japanese Battle Heroine).
Written in Haskell.
## Features
- Collection of Japanese battle heroines "PreCure" and their transformation and purification phrases.
- Currently, supports from the first season to "You and Idol PreCure♪", including Cure Echo, Cure Mofurun, Cure Pekorin, Cure Infini, and Cure Oasis!
- Monadic actions to play the speech of their transformations and purifications.
## Characteristics
**Each girl/PreCure/PreCure's variation/special item has her/its own type**.
So only correct combinations of girls/PreCures and items can transform and purify.
Compared with other PreCure implementations such as rubicure, clocure, etc., this makes it *much harder* to use, but it reproduces the settings more correctly.
*Correctness* is more important for this library.
## Installation
```sh
# pretty-simple is optional. But recommended if you try it on GHCi.
$ stack install typesafe-precure pretty-simple
## ... OR
$ cabal install typesafe-precure pretty-simple
```
## Example Usage
**Note**:
- To `show` Japanese characters in GHCi, use [pretty-simple](https://github.com/cdepillabout/pretty-simple)
### Get transformed PreCure, etc.
```haskell
$ ghci -interactive-print "Text.Pretty.Simple.pPrint"
ghci> :m ACME.PreCure
ghci> transformationSpeech (Mirai, Liko) (Mofurun :+: LinkleStoneDia)
[ "キュアップ・ラパパ! ダイヤ!"
, "ミラクル・マジカル・ジュエリーレ!"
, "ふたりの奇跡!キュアミラクル!"
, "ふたりの魔法!キュアマジカル!"
, "魔法つかいプリキュア!!"
]
ghci> transformedStyle (Mirai, Liko) (Mofurun :+: LinkleStoneRuby)
( CureMiracle_Ruby
, CureMagical_Ruby
)
ghci> purificationSpeech (CureMiracle_Ruby, CureMagical_Ruby) (Mofurun :+: LinkleStoneRuby, LinkleStick :+: LinkleStoneRuby)
[ "リンクルステッキ!"
, "(モッフー!)"
, "ルビー!紅の情熱よ私達の手に!"
, "フルフルリンクル!"
, "プリキュア!ルビー・パッショナーレ!"
]
```
### 🆕Get Transformation / Purification Speech Different between Episodes
*Since v0.8.0.1*
By using the `:<` operator, you can replace some part of the speech into another episode's version. For example:
```haskell
ghci> members = (Manatsu, Sango, Minori, Asuka)
ghci> items = (TropicalPact :+: HeartKuruRingCureSummer, TropicalPact :+: HeartKuruRingCureCoral, TropicalPact :+: HeartKuruRingCurePapaya, TropicalPact :+: HeartKuruRingCureFlamingo)
ghci> transformationSpeech (members :< "うわさも吹き飛ぶ!") items
[ "プリキュア!トロピカルチェンジ!"
, "レッツメイク!キャッチ!"
, "チーク!"
, "アイズ!"
, "ヘアー!"
, "リップ!"
, "ドレス!"
, "ときめく常夏!キュアサマー!"
, "きらめく宝石!キュアコーラル!"
, "ひらめく果実(フルーツ)!キュアパパイア!"
, "はためく翼!キュアフラミンゴ!"
, "はーっ!"
, "うわさも吹き飛ぶ!"
, "トロピカル〜ジュ!プリキュア!"
]
```
Compare with `transformationSpeech members items`!
In addition to the example above, the following transformations and purifications can be replaced by `:<`:
From Tropical-Rouge! PreCure:
```haskell
purificationSpeech (Laura :< "赤") MermaidAquaPot
members = (Manatsu, Sango, Minori, Asuka, Laura)
items = (TropicalPact :+: HeartKuruRingCureSummer, TropicalPact :+: HeartKuruRingCureCoral, TropicalPact :+: HeartKuruRingCurePapaya, TropicalPact :+: HeartKuruRingCureFlamingo, MermaidAquaPact :+: HeartKuruRingCureLaMer)
transformationSpeech (members :< "子どももなれるよ!") items
```
From DokiDoki! PreCure:
```haskell
transformationSpeech (Mana :< "ヤギさん") (LovelyCommuneSharuru :+: CureLoveads)
transformationSpeech ((Mana, Rikka, Alice, Makoto) :< "バラさん") (LovelyCommuneSharuru :+: CureLoveads, LovelyCommuneRaquel :+: CureLoveads, LovelyCommuneLance :+: CureLoveads, LovelyCommuneDavi :+: CureLoveads)
transformationSpeech ((Mana, Rikka, Alice, Makoto, Aguri) :< "タコさん") (LovelyCommuneSharuru :+: CureLoveads, LovelyCommuneRaquel :+: CureLoveads, LovelyCommuneLance :+: CureLoveads, LovelyCommuneDavi :+: CureLoveads, LoveEyesPalette :+: CureLoveads)
```
### PreCure Monad
```haskell
ghci> :{
ghci> let scene = do
....> say "この罪を抱いたまま、もう一度、グランプリンセスを目指す!"
....> scarlet <- transform Towa (PrincessPerfume :+: DressUpKeyScarlet)
....> scarletModeElegant <- transform scarlet (PrincessPerfume :+: DressUpKeyPhoenix)
....> purify scarletModeElegant (ScarletViolin :+: DressUpKeyPhoenix)
ghci> :}
ghci> :t scene
scene :: ACME.PreCure.Monad.PreCureMonad ()
```
#### Transform and Purify as a Pure Function
```haskell
ghci> composeEpisode scene
[ "この罪を抱いたまま、もう一度、グランプリンセスを目指す!"
, "プリキュア!プリンセスエンゲージ!"
, "深紅の炎のプリンセス!キュアスカーレット!"
, "冷たい檻に閉ざされた夢、返していただきますわ。"
, "お覚悟を決めなさい!"
, "エクスチェンジ!モードエレガント!"
, "スカーレット・バイオリン!フェニックス!"
, "羽ばたけ炎の翼!"
, "プリキュア! フェニックス・ブレイズ!"
, "ごきげんよう。"
]
```
#### Transform and Purify as an IO Action
The phrases are printed by line. Inspired by the similar feature of rubicure.
```haskell
ghci> printEpisode scene
この罪を抱いたまま、もう一度、グランプリンセスを目指す!
プリキュア!プリンセスエンゲージ!
深紅の炎のプリンセス!キュアスカーレット!
冷たい檻に閉ざされた夢、返していただきますわ。
お覚悟を決めなさい!
エクスチェンジ!モードエレガント!
スカーレット・バイオリン!フェニックス!
羽ばたけ炎の翼!
プリキュア! フェニックス・ブレイズ!
ごきげんよう。
```