私はこれをpythonで行っています。そのために設計されていない言語で、伝統的に純粋な関数型のスタイルで書くのは面倒です。たとえば、in_orderの2つの定義を対比します。
def in_order(xs):
for i in range(1,len(xs)):
if xs[i] > xs[i+1]:
return False
return True
inOrder :: (Ord a) => [a] -> Bool
inOrder xs = and $ zipWith (<=) xs (tail xs)
書き込みin_order
pythonでHaskellの方法は、(のpythonは非常によく、必要なイディオムをサポートしていないので)両方の冗長可能と低速(線形空間の代わりに、怠惰のためにHaskellの一定の空間)になるだろう。
しかし、私は機能的な編成と各関数の慣用的な実装を備えたpythonプログラムの作成に成功しました。これがプログラミングの良い方法であるという考えは、実際には私のcodecatalogプロジェクトの背後にある論文です。したがって、私のコンポーネントは、状態を持つクラスではなく、抽象化とそれらに作用する(純粋なインターフェースを持つ)関数を中心にしており、うまく統合されています。実際、この方法で編成されたコードは、クラスで編成されたコードよりも柔軟に再利用できます。しかし、私はまだハスケルの信者なので、それは個人的な偏見かもしれません。
だから私はあなたの質問への答えはちょっとだと思います。機能的なルーツを使用して考えやすくしますが、無理しないでください。例えば。イディオムのためだけにRubyで遅延リストをシミュレートすることは、おそらくそれよりも厄介なことになるでしょう。