Skip to content

Commit

Permalink
Prototype Haskell Fix Traversal combinator
Browse files Browse the repository at this point in the history
  • Loading branch information
AriFordsham committed Aug 31, 2022
1 parent 80556fe commit 1231ca4
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
27 changes: 27 additions & 0 deletions Plutarch/CPS/Optics/Fix.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{-# LANGUAGE PartialTypeSignatures #-}
module Plutarch.CPS.Optics.Fix(fixt) where

import Data.Fix
import Control.Lens

import Data.Functor.Base
import Data.Function

fixt ::
(Applicative f) =>
(forall ra rb. (ra -> f rb) -> a ra -> f (b rb)) ->
Fix a ->
f (Fix b)
fixt f = fmap Fix . (fix (f . dimap unFix (fmap Fix))) . unFix

list' :: Traversal (Fix (ListF a)) (Fix (ListF b)) a b
list' f = fixt (listf f)

listf ::
(Applicative f) =>
(a -> f b) ->
(ra -> f rb) ->
ListF a ra ->
f (ListF b rb)
listf _ _ Nil = pure Nil
listf f r (Cons a b) = Cons <$> f a <*> r b
4 changes: 4 additions & 0 deletions plutarch-core.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ library

exposed-modules:
Plutarch.Core
Plutarch.CPS.Optics.Fix
Plutarch.CPS.Optics.Iso
Plutarch.CPS.Optics.Lens
Plutarch.CPS.Optics.Optic
Expand All @@ -116,5 +117,8 @@ library

build-depends:
, base
, data-fix
, generics-sop
, lens
, mtl
, recursion-schemes

0 comments on commit 1231ca4

Please sign in to comment.