現在作ろうとしているツールの一環として、「一定の文字列候補の中から、入力された文字列に一致する文字列をフィルタリングする」機能を作ろうとしています。
(最終的に作りたいものはrofiやdmenuと似たようなものです、というか具体的にはrofiクローンのようなツールを作ろうとしています)
このツールでは「文字列の一致」の判定方法をFuzzyやGlob、regex等複数から選べるようにしたいため、ツール全体のステートを維持する型の中に判定用の関数(matcherと呼ぶことにします)を含めたいです。
実際に今考えていたのは以下のような型です:
しかし、)の都合で
実装の仕方を自分なりに複数考えてみたのですが、どれも微妙でどれを選ぶべきなのか、またより良い方法は無いのかで悩んでいます。
何かしら定石みたいなものがあれば教えていただければ幸いです :pray:
(自分で考えたものはスレッドに書き込みます)
(最終的に作りたいものはrofiやdmenuと似たようなものです、というか具体的にはrofiクローンのようなツールを作ろうとしています)
このツールでは「文字列の一致」の判定方法をFuzzyやGlob、regex等複数から選べるようにしたいため、ツール全体のステートを維持する型の中に判定用の関数(matcherと呼ぶことにします)を含めたいです。
実際に今考えていたのは以下のような型です:
data AppModel = AppModel { _typing :: Text , _candidates :: Zipper Candidate , _configFile :: FilePath , _matcher :: (T.Text -> T.Text -> Bool) -- ^ ここのこと } deriving (Eq)
しかし、
AppModel
はUIライブラリ(Eq
インスタンスを持つ必要があるのですが、 Eq (a -> a)
のインスタンスが存在しない故に定義が出来なくなってしまっています。実装の仕方を自分なりに複数考えてみたのですが、どれも微妙でどれを選ぶべきなのか、またより良い方法は無いのかで悩んでいます。
何かしら定石みたいなものがあれば教えていただければ幸いです :pray:
(自分で考えたものはスレッドに書き込みます)