├── .github ├── ISSUE_TEMPLATE │ ├── bug.md │ └── feature_request.md ├── PULL_REQUEST_TEMPLATE.md └── workflows │ ├── deploy-docs.yml │ ├── nef-compile.yml │ └── swift.yml ├── .gitignore ├── Bow.podspec ├── Bow.xcodeproj ├── BowTests_Info.plist ├── Bow_Info.plist ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── swiftpm │ │ └── Package.resolved └── xcshareddata │ └── xcschemes │ ├── Bow-Effects-Generators.xcscheme │ ├── Bow-Effects.xcscheme │ ├── Bow-Free-Generators.xcscheme │ ├── Bow-Free.xcscheme │ ├── Bow-Generators.xcscheme │ ├── Bow-Generic.xcscheme │ ├── Bow-Optics.xcscheme │ ├── Bow-OpticsLaws.xcscheme │ ├── Bow-RecursionSchemes.xcscheme │ ├── Bow-Rx-Generators.xcscheme │ ├── Bow-Rx.xcscheme │ ├── Bow.xcscheme │ ├── BowAllTests.xcscheme │ └── xcschememanagement.plist ├── BowEffects.podspec ├── BowEffectsGenerators.podspec ├── BowEffectsLaws.podspec ├── BowFree.podspec ├── BowFreeGenerators.podspec ├── BowGenerators.podspec ├── BowGeneric.podspec ├── BowLaws.podspec ├── BowOptics.podspec ├── BowOpticsLaws.podspec ├── BowRecursionSchemes.podspec ├── BowRx.podspec ├── BowRxGenerators.podspec ├── CHANGELOG ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Cartfile ├── Cartfile.private ├── Documentation.app ├── Contents │ ├── Info.plist │ ├── MacOS │ │ ├── Composition.playground │ │ │ ├── Pages │ │ │ │ ├── Combining independent computations.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Combining values of the same type.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Composing functions.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Composition Overview.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Lifting values to an effect.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Sequencing dependent computations.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Transforming data.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ └── Transforming multiple effects.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ ├── contents.xcplayground │ │ │ └── playground.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ ├── Dependency management.playground │ │ │ ├── Pages │ │ │ │ ├── Constructor-based dependency injection.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Dependency management Overview.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Partial application.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Reader.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ └── Side-effectful dependency management.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ ├── contents.xcplayground │ │ │ └── playground.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ ├── Documentation.xcodeproj │ │ │ ├── project.pbxproj │ │ │ ├── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ └── xcschemes │ │ │ │ └── Documentation.xcscheme │ │ ├── Documentation.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ ├── Documentation │ │ │ └── Info.plist │ │ ├── Effects.playground │ │ │ ├── Pages │ │ │ │ ├── Concurrency.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Effects Overview.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Foundation extensions.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Handling errors.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Handling resources.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Manipulating side effects.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Retrying and repeating effects.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Running side effects.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ └── Suspending side effects.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ ├── contents.xcplayground │ │ │ └── playground.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ ├── FP concepts.playground │ │ │ ├── Pages │ │ │ │ ├── Data types.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Functions vs Procedures.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Glossary.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Higher Kinded Types.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Rank-N polymorphism.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ └── Type classes.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ ├── contents.xcplayground │ │ │ ├── docs │ │ │ │ └── docs │ │ │ │ │ ├── README.md │ │ │ │ │ └── legal │ │ │ │ │ ├── credits │ │ │ │ │ └── README.md │ │ │ │ │ └── license │ │ │ │ │ └── README.md │ │ │ └── playground.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ ├── Integrations.playground │ │ │ ├── Pages │ │ │ │ └── RxSwift streams.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ ├── contents.xcplayground │ │ │ └── playground.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ ├── LICENSE │ │ ├── Legal.playground │ │ │ ├── Pages │ │ │ │ ├── Credits.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ └── License.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ ├── contents.xcplayground │ │ │ └── playground.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ ├── Optics.playground │ │ │ ├── Pages │ │ │ │ ├── Automatic derivation.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Composition.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Optics Overview.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ └── Writing your own optics.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ ├── contents.xcplayground │ │ │ └── playground.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ ├── Patterns.playground │ │ │ ├── Pages │ │ │ │ ├── Error handling.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Monad comprehensions.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Polymorphic programs.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── State-based computations.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ └── Tail recursion.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ ├── contents.xcplayground │ │ │ └── playground.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ ├── Podfile │ │ ├── Podfile.lock │ │ ├── Quick start.playground │ │ │ ├── Pages │ │ │ │ ├── Getting started.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Modules.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ └── Resources.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ ├── contents.xcplayground │ │ │ ├── docs │ │ │ │ └── docs │ │ │ │ │ └── quick-start │ │ │ │ │ ├── getting-started │ │ │ │ │ └── README.md │ │ │ │ │ ├── modules │ │ │ │ │ └── README.md │ │ │ │ │ └── resources │ │ │ │ │ └── README.md │ │ │ └── playground.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ ├── Testing.playground │ │ │ ├── Pages │ │ │ │ ├── Testing Overview.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ ├── Testing side effectful code.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ │ └── Testing type class instances.xcplaygroundpage │ │ │ │ │ └── Contents.swift │ │ │ ├── contents.xcplayground │ │ │ └── playground.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ └── launcher │ └── Resources │ │ ├── AppIcon.icns │ │ └── Assets.car └── Jekyll │ └── Home.md ├── Gemfile ├── Gemfile.lock ├── LICENSE ├── Package.resolved ├── Package.swift ├── README.md ├── Sources ├── Bow │ ├── Arrow │ │ ├── Cokleisli.swift │ │ ├── CokleisliK.swift │ │ ├── Function0.swift │ │ ├── Function1.swift │ │ ├── FunctionK+Coyoneda.swift │ │ ├── FunctionK.swift │ │ ├── Kleisli.swift │ │ └── LazyFunction1.swift │ ├── Data │ │ ├── Action.swift │ │ ├── Array.swift │ │ ├── ArrayK.swift │ │ ├── Co.swift │ │ ├── CoSum.swift │ │ ├── Const.swift │ │ ├── Coreader.swift │ │ ├── Coyoneda.swift │ │ ├── Day.swift │ │ ├── Dictionary.swift │ │ ├── DictionaryK.swift │ │ ├── Either.swift │ │ ├── EitherK.swift │ │ ├── Endo.swift │ │ ├── Eval.swift │ │ ├── Exists.swift │ │ ├── Id.swift │ │ ├── Ior.swift │ │ ├── Moore.swift │ │ ├── NonEmptyArray.swift │ │ ├── Option.swift │ │ ├── PairK.swift │ │ ├── Pairing.swift │ │ ├── Puller.swift │ │ ├── Reader.swift │ │ ├── Result.swift │ │ ├── Set.swift │ │ ├── SetK.swift │ │ ├── Sum.swift │ │ ├── Trampoline.swift │ │ ├── Tree.swift │ │ ├── Try.swift │ │ ├── Validated.swift │ │ ├── Yoneda.swift │ │ └── Zipper.swift │ ├── Instances │ │ ├── BoolInstances.swift │ │ ├── NumberInstances.swift │ │ ├── OptionInstances.swift │ │ └── StringInstances.swift │ ├── Syntax │ │ ├── BooleanFunctions.swift │ │ ├── Curry.swift │ │ ├── HigherKinds.swift │ │ ├── Memoization.swift │ │ ├── PartialApplication.swift │ │ ├── Predef.swift │ │ └── Reverse.swift │ ├── Transformers │ │ ├── EitherT.swift │ │ ├── EnvT.swift │ │ ├── OptionT.swift │ │ ├── StateT.swift │ │ ├── StoreT.swift │ │ ├── TracedT.swift │ │ └── WriterT.swift │ └── Typeclasses │ │ ├── Alternative.swift │ │ ├── Applicative.swift │ │ ├── ApplicativeError.swift │ │ ├── Bimonad.swift │ │ ├── Comonad.swift │ │ ├── ComonadEnv.swift │ │ ├── ComonadStore.swift │ │ ├── ComonadTraced.swift │ │ ├── ComonadTrans.swift │ │ ├── Comparable.swift │ │ ├── Contravariant.swift │ │ ├── Decidable.swift │ │ ├── Divide.swift │ │ ├── Divisible.swift │ │ ├── EquatableK.swift │ │ ├── Foldable.swift │ │ ├── Functor.swift │ │ ├── FunctorFilter.swift │ │ ├── HashableK.swift │ │ ├── Invariant.swift │ │ ├── Monad.swift │ │ ├── MonadCombine.swift │ │ ├── MonadComprehensions │ │ ├── BindingExpression.swift │ │ ├── BindingOperator.swift │ │ ├── BoundVar.swift │ │ ├── MonadComprenhensions.swift │ │ ├── ReaderBindingExpression.swift │ │ ├── StateBindingExpression.swift │ │ └── WriterBindingExpression.swift │ │ ├── MonadError.swift │ │ ├── MonadFilter.swift │ │ ├── MonadReader.swift │ │ ├── MonadState.swift │ │ ├── MonadTrans.swift │ │ ├── MonadWriter.swift │ │ ├── Monoid.swift │ │ ├── MonoidK.swift │ │ ├── Monoidal.swift │ │ ├── NonEmptyReducible.swift │ │ ├── Reducible.swift │ │ ├── Selective.swift │ │ ├── Semigroup.swift │ │ ├── SemigroupK.swift │ │ ├── Semigroupal.swift │ │ ├── Semiring.swift │ │ ├── Traverse.swift │ │ └── TraverseFilter.swift ├── BowEffects │ ├── Data │ │ ├── Array+TraverseConcurrent.swift │ │ ├── Atomic.swift │ │ ├── EnvIO.swift │ │ ├── IO.swift │ │ ├── Internal │ │ │ ├── Dictionary+Extensions.swift │ │ │ ├── DispatchTimeInterval+Extensions.swift │ │ │ └── Queue.swift │ │ ├── Ref.swift │ │ ├── Resource.swift │ │ └── Schedule.swift │ ├── Foundation │ │ ├── ConsoleIO.swift │ │ ├── FileManager+Common.swift │ │ ├── FileManager+iOS+Mac.swift │ │ └── URLSession.swift │ └── Typeclasses │ │ ├── Async.swift │ │ ├── Bracket.swift │ │ ├── Concurrent.swift │ │ ├── ConcurrentEffect.swift │ │ ├── ConcurrentTraverse.swift │ │ ├── Effect.swift │ │ ├── EffectComprehensions.swift │ │ ├── MonadDefer.swift │ │ └── UnsafeRun.swift ├── BowFree │ ├── Cofree.swift │ ├── Free.swift │ ├── FunctionK+Free.swift │ └── Program.swift ├── BowGeneric │ ├── Coproduct10.swift │ ├── Coproduct2.swift │ ├── Coproduct3.swift │ ├── Coproduct4.swift │ ├── Coproduct5.swift │ ├── Coproduct6.swift │ ├── Coproduct7.swift │ ├── Coproduct8.swift │ ├── Coproduct9.swift │ ├── Generic.swift │ ├── HList.swift │ └── Product.swift ├── BowOptics │ ├── AffineTraversal.swift │ ├── Auto │ │ ├── AutoAffineTraversal.swift │ │ ├── AutoFold.swift │ │ ├── AutoGetter.swift │ │ ├── AutoLens.swift │ │ ├── AutoOptics.swift │ │ ├── AutoPrism.swift │ │ ├── AutoSetter.swift │ │ └── AutoTraversal.swift │ ├── BoundSetter.swift │ ├── DSL │ │ ├── At+Optics.swift │ │ ├── Each+Optics.swift │ │ ├── Index+Optics.swift │ │ └── Kind+Optics.swift │ ├── Extensions │ │ └── StateT+Optics.swift │ ├── Fold.swift │ ├── Getter.swift │ ├── Instances │ │ ├── ArrayKOpticsInstances.swift │ │ ├── ArrayOpticsInstances.swift │ │ ├── ConstOpticsInstances.swift │ │ ├── EitherKOpticsInstances.swift │ │ ├── EitherOpticsInstances.swift │ │ ├── IdOpticsInstances.swift │ │ ├── IorOpticsInstances.swift │ │ ├── NonEmptyArrayOpticsInstances.swift │ │ ├── OptionOpticsInstances.swift │ │ ├── StringOpticsInstances.swift │ │ ├── TryOpticsInstances.swift │ │ └── ValidatedOpticsInstances.swift │ ├── Iso.swift │ ├── Lens.swift │ ├── Prism.swift │ ├── STD │ │ ├── ArrayK+Optics.swift │ │ ├── Either+Optics.swift │ │ ├── Id+Optics.swift │ │ ├── Ior+Optics.swift │ │ ├── NonEmptyArray+Optics.swift │ │ ├── Option+Optics.swift │ │ ├── Result+Optics.swift │ │ ├── String+Optics.swift │ │ ├── Try+Optics.swift │ │ └── Validated+Optics.swift │ ├── Setter.swift │ ├── Traversal.swift │ ├── Tuple │ │ ├── Tuple10.swift │ │ ├── Tuple2.swift │ │ ├── Tuple3.swift │ │ ├── Tuple4.swift │ │ ├── Tuple5.swift │ │ ├── Tuple6.swift │ │ ├── Tuple7.swift │ │ ├── Tuple8.swift │ │ └── Tuple9.swift │ └── Typeclasses │ │ ├── At.swift │ │ ├── Cons.swift │ │ ├── Each.swift │ │ ├── FilterIndex.swift │ │ ├── Index.swift │ │ └── Snoc.swift ├── BowRecursionSchemes │ ├── Data │ │ ├── Fix.swift │ │ ├── Mu.swift │ │ └── Nu.swift │ ├── Recursion.swift │ └── Typeclasses │ │ ├── Birecursive.swift │ │ ├── Corecursive.swift │ │ └── Recursive.swift └── BowRx │ ├── MaybeK.swift │ ├── ObservableK.swift │ └── SingleK.swift ├── Support Files ├── Bow-AllTests-Info.plist ├── Bow-Effects-Generators-Info.plist ├── Bow-Effects-Info.plist ├── Bow-EffectsLaws-Info.plist ├── Bow-EffectsTests-Info.plist ├── Bow-Free-Generators-Info.plist ├── Bow-Free-Info.plist ├── Bow-FreeTests-Info.plist ├── Bow-Generators-Info.plist ├── Bow-Generic-Info.plist ├── Bow-GenericTests-Info.plist ├── Bow-Info.plist ├── Bow-Laws-Info.plist ├── Bow-Optics-Info.plist ├── Bow-OpticsLaws-Info.plist ├── Bow-OpticsTests-Info.plist ├── Bow-RecursionSchemes-Info.plist ├── Bow-RecursionSchemesTests-Info.plist ├── Bow-Rx-Info.plist ├── Bow-RxGenerators-Info.plist ├── Bow-RxTests-Info.plist └── Bow-Test-Info.plist ├── Tests ├── BowAllTests │ └── BowTests.xctestplan ├── BowEffectsGenerators │ └── IO+Gen.swift ├── BowEffectsLaws │ ├── AsyncLaws.swift │ ├── BracketLaws.swift │ └── MonadDeferLaws.swift ├── BowEffectsTests │ ├── EnvIOTest.swift │ └── IOTest.swift ├── BowFreeGenerators │ ├── Cofree+Gen.swift │ ├── Free+Gen.swift │ └── Program+Gen.swift ├── BowFreeTests │ ├── CofreeTest.swift │ ├── FreeTest.swift │ └── ProgramTest.swift ├── BowGenerators │ ├── Arrow │ │ ├── Function0+Gen.swift │ │ ├── Function1+Gen.swift │ │ ├── Kleisli+Gen.swift │ │ └── LazyFunction1+Gen.swift │ ├── Data │ │ ├── ArrayK+Gen.swift │ │ ├── Co+Gen.swift │ │ ├── Const+Gen.swift │ │ ├── CoyonedaGen.swift │ │ ├── Day+Gen.swift │ │ ├── DictionaryK+Gen.swift │ │ ├── Either+Gen.swift │ │ ├── EitherK+Gen.swift │ │ ├── Endo+Gen.swift │ │ ├── Eval+Gen.swift │ │ ├── Exists+Gen.swift │ │ ├── Id+Gen.swift │ │ ├── Ior+Gen.swift │ │ ├── Moore+Gen.swift │ │ ├── NonEmptyArray+Gen.swift │ │ ├── Option+Gen.swift │ │ ├── PairK+Gen.swift │ │ ├── Sum+Gen.swift │ │ ├── Trampoline+Gen.swift │ │ ├── Tree+Gen.swift │ │ ├── Try+Gen.swift │ │ ├── Validated+Gen.swift │ │ ├── Yoneda+Gen.swift │ │ └── Zipper+Gen.swift │ ├── Transformers │ │ ├── EitherT+Gen.swift │ │ ├── EnvT+Gen.swift │ │ ├── OptionT+Gen.swift │ │ ├── StateT+Gen.swift │ │ ├── StoreT+Gen.swift │ │ ├── TracedT+Gen.swift │ │ └── WriterT+Gen.swift │ └── Typeclasses │ │ └── ArbitraryK.swift ├── BowGenericTests │ └── GenericTest.swift ├── BowLaws │ ├── AlternativeLaws.swift │ ├── ApplicativeErrorLaws.swift │ ├── ApplicativeLaws.swift │ ├── BimonadLaws.swift │ ├── BindingOperatorOverload.swift │ ├── ComonadEnvLaws.swift │ ├── ComonadLaws.swift │ ├── ComonadStoreLaws.swift │ ├── ComonadTracedLaws.swift │ ├── ComonadTransLaws.swift │ ├── ComparableLaws.swift │ ├── ContravariantLaws.swift │ ├── CustomStringConvertibleLaws.swift │ ├── DivideLaws.swift │ ├── DivisibleLaws.swift │ ├── EqualityFunctions.swift │ ├── EquatableKLaws.swift │ ├── EquatableLaws.swift │ ├── FoldableLaws.swift │ ├── FunctorFilterLaws.swift │ ├── FunctorLaws.swift │ ├── HashableKLaws.swift │ ├── InvariantLaws.swift │ ├── MonadCombineLaws.swift │ ├── MonadErrorLaws.swift │ ├── MonadFilterLaws.swift │ ├── MonadLaws.swift │ ├── MonadStateLaws.swift │ ├── MonadTransLaws.swift │ ├── MonadWriterLaws.swift │ ├── MonoidKLaws.swift │ ├── MonoidLaws.swift │ ├── MonoidalLaws.swift │ ├── PropertyOperatorOverload.swift │ ├── SelectiveLaws.swift │ ├── SemigroupKLaws.swift │ ├── SemigroupLaws.swift │ ├── SemigroupalLaws.swift │ ├── SemiringLaws.swift │ ├── TraverseFilterLaws.swift │ └── TraverseLaws.swift ├── BowOpticsLaws │ ├── AffineTraversalLaws.swift │ ├── IsoLaws.swift │ ├── LensLaws.swift │ ├── PrismLaws.swift │ ├── SetterLaws.swift │ └── TraversalLaws.swift ├── BowOpticsTests │ ├── AffineTraversalTest.swift │ ├── FoldTest.swift │ ├── GetterTest.swift │ ├── IsoTest.swift │ ├── LensTest.swift │ ├── PrismTest.swift │ ├── SetterTest.swift │ ├── TestDomain.swift │ └── TraversalTest.swift ├── BowRecursionSchemesTests │ └── RecursionTest.swift ├── BowRxGenerators │ ├── MaybeK+Gen.swift │ ├── ObservableK+Gen.swift │ └── SingleK+Gen.swift ├── BowRxTests │ ├── MaybeKTest.swift │ ├── ObservableKTest.swift │ └── SingleKTest.swift └── BowTests │ ├── Arrow │ ├── Function0Test.swift │ ├── Function1Test.swift │ ├── KleisliTest.swift │ └── LazyFunction1Test.swift │ ├── Data │ ├── ArrayKTest.swift │ ├── ArrayTest.swift │ ├── CoTest.swift │ ├── ConstTest.swift │ ├── CoyonedaNaturalTransformationTests.swift │ ├── CoyonedaTest.swift │ ├── DayTest.swift │ ├── DictionaryKTest.swift │ ├── DictionaryTest.swift │ ├── EitherKTest.swift │ ├── EitherTest.swift │ ├── EndoTest.swift │ ├── EvalTest.swift │ ├── ExistsTests.swift │ ├── IdTest.swift │ ├── IorTest.swift │ ├── MooreTest.swift │ ├── NonEmptyArrayTest.swift │ ├── OptionTest.swift │ ├── PairKTest.swift │ ├── PairingTest.swift │ ├── ResultTest.swift │ ├── SetKTest.swift │ ├── SetTest.swift │ ├── SumTest.swift │ ├── TrampolineTest.swift │ ├── TreeTest.swift │ ├── TryTest.swift │ ├── ValidatedTest.swift │ ├── YonedaTest.swift │ └── ZipperTest.swift │ ├── Instances │ ├── BoolInstancesTest.swift │ ├── NumberInstancesTest.swift │ └── StringInstancesTest.swift │ ├── Syntax │ ├── BooleanFunctionsTest.swift │ ├── CurryTest.swift │ ├── MemoizationTest.swift │ ├── MonadComprehensionTest.swift │ ├── PartialApplicationTest.swift │ ├── PredefTest.swift │ └── ReverseTest.swift │ └── Transformers │ ├── EitherTTest.swift │ ├── EnvTTest.swift │ ├── OptionTTest.swift │ ├── StateTTest.swift │ ├── StoreTTest.swift │ ├── TracedTTest.swift │ └── WriterTTest.swift ├── docs ├── .gitignore ├── CNAME ├── Gemfile ├── Gemfile.lock ├── _config.yml ├── _data │ ├── features.yml │ └── menu.yml ├── _includes │ ├── _doc-wrapper.html │ ├── _footer.html │ ├── _google-tag-manager.html │ ├── _head-docs.html │ ├── _head.html │ ├── _header.html │ ├── _js-bottom-docs.html │ ├── _main.html │ ├── _nav.html │ ├── _navigation-api-versions.html │ ├── _navigation-doc-versions.html │ ├── _sidebar-doc-versions.html │ └── _sidebar-wrapper.html ├── _layouts │ ├── docs.html │ └── home.html ├── _sass │ ├── base │ │ ├── _base.scss │ │ └── _reset.scss │ ├── components │ │ ├── _badges.scss │ │ ├── _buttons.scss │ │ ├── _code.scss │ │ ├── _doc-body.scss │ │ ├── _doc-content.scss │ │ ├── _doc-header.scss │ │ ├── _doc-versions.scss │ │ ├── _features.scss │ │ ├── _footer.scss │ │ ├── _masthead.scss │ │ ├── _navigation.scss │ │ ├── _sidebar-nav.scss │ │ ├── _sidebar.scss │ │ ├── _table.scss │ │ └── _wrapper.scss │ ├── utils │ │ ├── _mixins.scss │ │ ├── _variables.scss │ │ └── mixins │ │ │ ├── _breakpoint.scss │ │ │ ├── _flexbox.scss │ │ │ └── _helpers.scss │ └── vendors │ │ └── animate │ │ ├── _attention-seekers │ │ ├── _bounce.scss │ │ ├── _flash.scss │ │ ├── _jello.scss │ │ ├── _pulse.scss │ │ ├── _rubberBand.scss │ │ ├── _shake.scss │ │ ├── _swing.scss │ │ ├── _tada.scss │ │ ├── _wobble.scss │ │ └── attention-seekers.scss │ │ ├── _bouncing-entrances │ │ ├── _bounceIn.scss │ │ ├── _bounceInDown.scss │ │ ├── _bounceInLeft.scss │ │ ├── _bounceInRight.scss │ │ ├── _bounceInUp.scss │ │ └── bouncing-entrances.scss │ │ ├── _bouncing-exits │ │ ├── _bounceOut.scss │ │ ├── _bounceOutDown.scss │ │ ├── _bounceOutLeft.scss │ │ ├── _bounceOutRight.scss │ │ ├── _bounceOutUp.scss │ │ └── bouncing-exits.scss │ │ ├── _fading-entrances │ │ ├── _fadeIn.scss │ │ ├── _fadeInDown.scss │ │ ├── _fadeInDownBig.scss │ │ ├── _fadeInLeft.scss │ │ ├── _fadeInLeftBig.scss │ │ ├── _fadeInRight.scss │ │ ├── _fadeInRightBig.scss │ │ ├── _fadeInUp.scss │ │ ├── _fadeInUpBig.scss │ │ └── fading-entrances.scss │ │ ├── _fading-exits │ │ ├── _fadeOut.scss │ │ ├── _fadeOutDown.scss │ │ ├── _fadeOutDownBig.scss │ │ ├── _fadeOutLeft.scss │ │ ├── _fadeOutLeftBig.scss │ │ ├── _fadeOutRight.scss │ │ ├── _fadeOutRightBig.scss │ │ ├── _fadeOutUp.scss │ │ ├── _fadeOutUpBig.scss │ │ └── fading-exits.scss │ │ ├── _flippers │ │ ├── _flip.scss │ │ ├── _flipInX.scss │ │ ├── _flipInY.scss │ │ ├── _flipOutX.scss │ │ ├── _flipOutY.scss │ │ └── flippers.scss │ │ ├── _lightspeed │ │ ├── _lightSpeedIn.scss │ │ ├── _lightSpeedOut.scss │ │ └── lightspeed.scss │ │ ├── _properties.scss │ │ ├── _rotating-entrances │ │ ├── _rotateIn.scss │ │ ├── _rotateInDownLeft.scss │ │ ├── _rotateInDownRight.scss │ │ ├── _rotateInUpLeft.scss │ │ ├── _rotateInUpRight.scss │ │ └── rotating-entrances.scss │ │ ├── _rotating-exits │ │ ├── _rotateOut.scss │ │ ├── _rotateOutDownLeft.scss │ │ ├── _rotateOutDownRight.scss │ │ ├── _rotateOutUpLeft.scss │ │ ├── _rotateOutUpRight.scss │ │ └── rotating-exits.scss │ │ ├── _sliding-entrances │ │ ├── _slideInDown.scss │ │ ├── _slideInLeft.scss │ │ ├── _slideInRight.scss │ │ ├── _slideInUp.scss │ │ └── sliding-entrances.scss │ │ ├── _sliding-exits │ │ ├── _slideOutDown.scss │ │ ├── _slideOutLeft.scss │ │ ├── _slideOutRight.scss │ │ ├── _slideOutUp.scss │ │ └── sliding-exits.scss │ │ ├── _specials │ │ ├── _hinge.scss │ │ ├── _rollIn.scss │ │ ├── _rollOut.scss │ │ └── specials.scss │ │ ├── _zooming-entrances │ │ ├── _zoomIn.scss │ │ ├── _zoomInDown.scss │ │ ├── _zoomInLeft.scss │ │ ├── _zoomInRight.scss │ │ ├── _zoomInUp.scss │ │ └── zooming-entrances.scss │ │ ├── _zooming-exits │ │ ├── _zoomOut.scss │ │ ├── _zoomOutDown.scss │ │ ├── _zoomOutLeft.scss │ │ ├── _zoomOutRight.scss │ │ ├── _zoomOutUp.scss │ │ └── zooming-exits.scss │ │ └── animate.scss ├── css │ ├── docs.scss │ └── styles.scss ├── extra │ ├── apple-jazzy-theme │ │ ├── assets │ │ │ ├── css │ │ │ │ ├── highlight.css.scss │ │ │ │ └── jazzy.css.scss │ │ │ ├── img │ │ │ │ ├── carat.png │ │ │ │ ├── dash.png │ │ │ │ └── gh.png │ │ │ └── js │ │ │ │ ├── jazzy.js │ │ │ │ └── jquery.min.js │ │ └── templates │ │ │ ├── doc.mustache │ │ │ ├── footer.mustache │ │ │ ├── header.mustache │ │ │ ├── nav.mustache │ │ │ ├── parameter.mustache │ │ │ ├── task.mustache │ │ │ └── tasks.mustache │ ├── bow-jazzy-theme │ │ ├── LICENSE │ │ ├── assets │ │ │ ├── css │ │ │ │ ├── highlight.css │ │ │ │ └── jazzy.css.scss │ │ │ ├── fonts │ │ │ │ ├── opensans-bold.eot │ │ │ │ ├── opensans-bold.woff │ │ │ │ ├── opensans-regular.eot │ │ │ │ └── opensans-regular.woff │ │ │ ├── img │ │ │ │ ├── bow-logo.png │ │ │ │ ├── carat.png │ │ │ │ ├── dash.png │ │ │ │ ├── github.svg │ │ │ │ ├── link.svg │ │ │ │ ├── mapbox.svg │ │ │ │ ├── minus.svg │ │ │ │ └── plus.svg │ │ │ └── js │ │ │ │ ├── jazzy.js │ │ │ │ ├── jazzy.search.js │ │ │ │ ├── jquery.min.js │ │ │ │ ├── lunr.min.js │ │ │ │ └── typeahead.jquery.js │ │ └── templates │ │ │ ├── deprecation.mustache │ │ │ ├── doc.mustache │ │ │ ├── footer.mustache │ │ │ ├── header.mustache │ │ │ ├── nav.mustache │ │ │ ├── parameter.mustache │ │ │ ├── task.mustache │ │ │ └── tasks.mustache │ └── mapbox-jazzy-theme │ │ ├── LICENSE │ │ ├── assets │ │ ├── css │ │ │ ├── highlight.css.scss │ │ │ └── jazzy.css.scss │ │ ├── fonts │ │ │ ├── opensans-bold.eot │ │ │ ├── opensans-bold.woff │ │ │ ├── opensans-regular.eot │ │ │ └── opensans-regular.woff │ │ ├── img │ │ │ ├── carat.png │ │ │ ├── dash.png │ │ │ ├── github.svg │ │ │ ├── link.svg │ │ │ ├── mapbox.svg │ │ │ ├── minus.svg │ │ │ └── plus.svg │ │ └── js │ │ │ ├── jazzy.js │ │ │ ├── jazzy.search.js │ │ │ ├── jquery.min.js │ │ │ ├── lunr.min.js │ │ │ └── typeahead.jquery.js │ │ └── templates │ │ ├── deprecation.mustache │ │ ├── doc.mustache │ │ ├── footer.mustache │ │ ├── header.mustache │ │ ├── nav.mustache │ │ ├── parameter.mustache │ │ ├── task.mustache │ │ └── tasks.mustache ├── img │ ├── bow-brand-color.png │ ├── bow-logo.png │ ├── bow-logo.svg │ ├── bow-logo_no-text.png │ ├── favicon.png │ ├── feature-icon-primary.svg │ ├── feature-icon-quarter.svg │ ├── feature-icon-secondary.svg │ ├── feature-icon-tertiary.svg │ ├── icon.svg │ ├── logo_masthead.svg │ └── twitter-card.png ├── index.md └── js │ ├── doc-versions.js │ ├── docs.js │ └── functions.js ├── fastlane ├── Appfile ├── Fastfile └── README.md ├── favicon.png └── scripts └── gen-docs.rb /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Request new functionality in Bow 4 | title: [Request] 5 | labels: '' 6 | assignees: Maintainers 7 | 8 | --- 9 | 10 | ## Description 11 | 12 | *Describe your proposal for new functionality.* 13 | 14 | ## Sample usage 15 | 16 | *Provide sample code of how the new functionality should work.* 17 | 18 | ## Potential implementation 19 | 20 | *Provide an outline of how this functionality could be implemented.* 21 | 22 | ## Modules 23 | 24 | *List the modules that may be affected by this new functionality. Describe if any new modules will need to be created.* 25 | 26 | ## Breaking changes 27 | 28 | *Describe possible breaking changes that may happen if this functionality is included.* 29 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## Related issues 2 | 3 | *Reference issues that you are addressing with this pull request.* 4 | 5 | ## Goal 6 | 7 | *Describe the objective of these changes.* 8 | 9 | ## Implementation details 10 | 11 | *Describe any remarkable decisions that you made in the implementation of these changes.* 12 | 13 | ## Testing details 14 | 15 | *Describe any remarkable decisions that you made in the tests of these changes. 16 | -------------------------------------------------------------------------------- /.github/workflows/deploy-docs.yml: -------------------------------------------------------------------------------- 1 | name: Deploy docs 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | 8 | jobs: 9 | build: 10 | runs-on: macos-latest 11 | 12 | steps: 13 | - uses: actions/checkout@v2 14 | - name: Switch to Xcode 12 15 | run: sudo xcode-select -s /Applications/Xcode_12.app/Contents/Developer 16 | - name: Generate microsite 17 | run: | 18 | brew update-reset 19 | brew install nef 20 | brew install sourcekitten 21 | gem install bundler -v 2.0.2 22 | gem install cocoapods -v 1.9.1 23 | ./scripts/gen-docs.rb 24 | - name: Deploy microsite 25 | uses: peaceiris/actions-gh-pages@v3 26 | with: 27 | personal_token: ${{ secrets.DEPLOY_TOKEN }} 28 | publish_branch: gh-pages 29 | publish_dir: ./pub-dir 30 | disable_nojekyll: true 31 | -------------------------------------------------------------------------------- /.github/workflows/nef-compile.yml: -------------------------------------------------------------------------------- 1 | name: nef Compilation 2 | 3 | on: [pull_request] 4 | 5 | jobs: 6 | build: 7 | runs-on: macos-latest 8 | 9 | steps: 10 | - uses: actions/checkout@v2 11 | - name: Switch to Xcode 12 12 | run: sudo xcode-select -s /Applications/Xcode_12.app/Contents/Developer 13 | - name: Compile documentation 14 | run: | 15 | brew update-reset 16 | brew install nef 17 | gem install cocoapods -v 1.9.1 18 | nef compile --project Documentation.app 19 | -------------------------------------------------------------------------------- /Bow.xcodeproj/BowTests_Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CFBundleDevelopmentRegion 5 | en 6 | CFBundleExecutable 7 | $(EXECUTABLE_NAME) 8 | CFBundleIdentifier 9 | $(PRODUCT_BUNDLE_IDENTIFIER) 10 | CFBundleInfoDictionaryVersion 11 | 6.0 12 | CFBundleName 13 | $(PRODUCT_NAME) 14 | CFBundlePackageType 15 | BNDL 16 | CFBundleShortVersionString 17 | 1.0 18 | CFBundleSignature 19 | ???? 20 | CFBundleVersion 21 | $(CURRENT_PROJECT_VERSION) 22 | NSPrincipalClass 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Bow.xcodeproj/Bow_Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Bow.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bow.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "object": { 3 | "pins": [ 4 | { 5 | "package": "RxSwift", 6 | "repositoryURL": "https://github.com/ReactiveX/RxSwift", 7 | "state": { 8 | "branch": null, 9 | "revision": "002d325b0bdee94e7882e1114af5ff4fe1e96afa", 10 | "version": "5.1.1" 11 | } 12 | }, 13 | { 14 | "package": "SwiftCheck", 15 | "repositoryURL": "https://github.com/bow-swift/SwiftCheck.git", 16 | "state": { 17 | "branch": null, 18 | "revision": "748359f9a95edf94d0c4664102f104f56b1ff1fb", 19 | "version": "0.12.1" 20 | } 21 | } 22 | ] 23 | }, 24 | "version": 1 25 | } 26 | -------------------------------------------------------------------------------- /Bow.xcodeproj/xcshareddata/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | SchemeUserState 5 | 6 | Bow-Package.xcscheme 7 | 8 | 9 | SuppressBuildableAutocreation 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /CHANGELOG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/CHANGELOG -------------------------------------------------------------------------------- /Cartfile: -------------------------------------------------------------------------------- 1 | github "ReactiveX/RxSwift" ~> 5.0.0 2 | -------------------------------------------------------------------------------- /Cartfile.private: -------------------------------------------------------------------------------- 1 | github "typelift/SwiftCheck" ~> 0.12.0 2 | 3 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Composition.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Composition.playground/playground.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Dependency management.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Dependency management.playground/playground.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Documentation.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Documentation.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Documentation/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1.0 21 | NSHumanReadableCopyright 22 | Copyright © 2019. The nef authors. 23 | 24 | 25 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Effects.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Effects.playground/playground.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/FP concepts.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/FP concepts.playground/docs/docs/legal/credits/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Credits 4 | permalink: /docs/legal/credits/ 5 | --- 6 | 7 | # Credits 8 | 9 | 2019 - © The Bow Authors 10 | 11 | For a comprehensive list of contributors, [visit the repository](https://github.com/bow-swift/bow/graphs/contributors) on GitHub. 12 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/FP concepts.playground/playground.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Integrations.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Integrations.playground/playground.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (C) 2019 The nef Authors 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Legal.playground/Pages/Credits.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- 1 | // nef:begin:header 2 | /* 3 | layout: docs 4 | title: Credits 5 | */ 6 | // nef:end 7 | /*: 8 | # Credits 9 | 10 | 2019 - © The Bow Authors 11 | 12 | For a comprehensive list of contributors, [visit the repository](https://github.com/bow-swift/bow/graphs/contributors) on GitHub. 13 | 14 | Bow is supported by [47 Degrees](https://www.47deg.com). 15 | */ 16 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Legal.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Legal.playground/playground.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Optics.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Optics.playground/playground.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Patterns.playground/Pages/Polymorphic programs.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- 1 | // nef:begin:header 2 | /* 3 | layout: docs 4 | title: Polymorphic programs 5 | */ 6 | // nef:end 7 | /*: 8 | # Polymorphic programs 9 | 10 | {:.intermediate} 11 | intermediate 12 | 13 | > Content under development. 14 | */ 15 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Patterns.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Patterns.playground/playground.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Podfile: -------------------------------------------------------------------------------- 1 | target 'Documentation' do 2 | platform :osx, '10.14' 3 | use_frameworks! 4 | 5 | pod "Bow", :path => '../../..' 6 | pod "BowEffects", :path => '../../..' 7 | pod "BowRx", :path => '../../..' 8 | pod "BowOptics", :path => '../../..' 9 | pod "BowGeneric", :path => '../../..' 10 | pod "BowRecursionSchemes", :path => '../../..' 11 | pod "BowFree", :path => '../../..' 12 | pod "BowGenerators", :path => '../../..' 13 | pod "BowLaws", :path => '../../..' 14 | end 15 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Quick start.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Quick start.playground/playground.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Testing.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/Testing.playground/playground.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Documentation.app/Contents/MacOS/launcher: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | workspace="Documentation.xcworkspace" 4 | workspacePath=$(echo "$0" | rev | cut -f2- -d '/' | rev) 5 | 6 | open "`pwd`/$workspacePath/$workspace" 7 | -------------------------------------------------------------------------------- /Documentation.app/Contents/Resources/AppIcon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/Documentation.app/Contents/Resources/AppIcon.icns -------------------------------------------------------------------------------- /Documentation.app/Contents/Resources/Assets.car: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/Documentation.app/Contents/Resources/Assets.car -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem "fastlane" 4 | gem "cocoapods", "~> 1.8.1" 5 | -------------------------------------------------------------------------------- /Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "object": { 3 | "pins": [ 4 | { 5 | "package": "RxSwift", 6 | "repositoryURL": "https://github.com/ReactiveX/RxSwift.git", 7 | "state": { 8 | "branch": null, 9 | "revision": "002d325b0bdee94e7882e1114af5ff4fe1e96afa", 10 | "version": "5.1.1" 11 | } 12 | }, 13 | { 14 | "package": "SwiftCheck", 15 | "repositoryURL": "https://github.com/bow-swift/SwiftCheck.git", 16 | "state": { 17 | "branch": null, 18 | "revision": "748359f9a95edf94d0c4664102f104f56b1ff1fb", 19 | "version": "0.12.1" 20 | } 21 | } 22 | ] 23 | }, 24 | "version": 1 25 | } 26 | -------------------------------------------------------------------------------- /Sources/Bow/Data/Coreader.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | /// Coreader is a special case of CoreaderT / Cokleisli where F is `Id`, so it is equivalent to functions `(A) -> B`. 4 | public class Coreader: CoreaderT { 5 | /// Convenience initializer for Coreader 6 | /// 7 | /// - Parameter run: Function to be enclosed in this Coreader. 8 | public init(_ run: @escaping (A) -> B) { 9 | super.init { idA in run(idA^.value) } 10 | } 11 | 12 | /// Runs this Coreader function with the given input. 13 | /// 14 | /// - Parameter a: Input value for the function. 15 | /// - Returns: Output of the function. 16 | public func runId(_ a: A) -> B { 17 | self.run(Id(a)) 18 | } 19 | } 20 | 21 | -------------------------------------------------------------------------------- /Sources/Bow/Data/Dictionary.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: Instance of Semigroup for Dictionary 4 | 5 | extension Dictionary: Semigroup { 6 | public func combine(_ other: Dictionary) -> Dictionary { 7 | self.merging(other, uniquingKeysWith: { _, otherValue in otherValue }) 8 | } 9 | } 10 | 11 | // MARK: Instances of Monoid for Dictionary 12 | 13 | extension Dictionary: Monoid { 14 | public static func empty() -> Dictionary { 15 | [:] 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Sources/Bow/Data/Reader.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | /// Reader is a special case of ReaderT / Kleisli where F is `Id`, so it is equivalent to functions `(D) -> A`. 4 | public typealias Reader = ReaderT 5 | 6 | /// Alias over `ReaderTPartial` 7 | public typealias ReaderPartial = ReaderTPartial 8 | -------------------------------------------------------------------------------- /Sources/Bow/Data/Set.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: Instance of Semigroup for Set 4 | extension Set: Semigroup { 5 | public func combine(_ other: Set) -> Set { 6 | self.union(other) 7 | } 8 | } 9 | 10 | // MARK: Instance of Monoid for Set 11 | extension Set: Monoid { 12 | public static func empty() -> Set { 13 | Set() 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Sources/Bow/Instances/BoolInstances.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: Instance of Semigroup for Bool. Uses disjunction as combination of elements. 4 | extension Bool: Semigroup { 5 | public func combine(_ other: Bool) -> Bool { 6 | self || other 7 | } 8 | } 9 | 10 | // MARK: Instance of Monoid for Bool. Uses false as empty element. 11 | extension Bool: Monoid { 12 | public static func empty() -> Bool { 13 | false 14 | } 15 | } 16 | 17 | // MARK: Instance of Semiring for Bool. Uses conjunction as multiplication of elements and true as unit element. 18 | extension Bool: Semiring { 19 | public func multiply(_ other: Bool) -> Bool { 20 | self && other 21 | } 22 | 23 | public static func one() -> Bool { 24 | true 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Sources/Bow/Instances/StringInstances.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: Instance of Semigroup for String, using concatenation as combination method 4 | extension String: Semigroup { 5 | public func combine(_ other: String) -> String { 6 | self + other 7 | } 8 | } 9 | 10 | // MARK: Instance of Monoid for String, using empty string as empty element 11 | extension String: Monoid { 12 | public static func empty() -> String { 13 | "" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Sources/Bow/Typeclasses/Alternative.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | /// An Alternative is an `Applicative` with `MonoidK` capabilities. 4 | public protocol Alternative: Applicative, MonoidK {} 5 | -------------------------------------------------------------------------------- /Sources/Bow/Typeclasses/Bimonad.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | /// A Bimonad has the same capabilities as `Monad` and `Comonad`. 4 | public protocol Bimonad: Monad, Comonad {} 5 | -------------------------------------------------------------------------------- /Sources/Bow/Typeclasses/ComonadTrans.swift: -------------------------------------------------------------------------------- 1 | /// The ComonadTrans type class represents Comonad Transformers. 2 | public protocol ComonadTrans: Comonad { 3 | /// The input type parameter of this transformer. 4 | associatedtype W: Comonad 5 | 6 | /// Obtains the comonadic value contained in the provided comonad transformer. 7 | /// 8 | /// - Parameter twa: Value containing another comonadic value. 9 | /// - Returns: Contained comonadic value within the transformer. 10 | static func lower(_ twa: Kind) -> Kind 11 | } 12 | 13 | // MARK: Syntax for ComonadTrans 14 | 15 | public extension Kind where F: ComonadTrans { 16 | /// Obtains the comonadic value contained in the provided comonad transformer. 17 | /// 18 | /// - Returns: Contained comonadic value within the transformer. 19 | func lower() -> Kind { 20 | F.lower(self) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Sources/Bow/Typeclasses/Divisible.swift: -------------------------------------------------------------------------------- 1 | /// Divisible extends Divide by providing an empty value. 2 | public protocol Divisible: Divide { 3 | /// Provides an empty value for this Divisible instance 4 | static func conquer() -> Kind 5 | } 6 | 7 | // MARK: Syntax for Divisible 8 | public extension Kind where F: Divisible { 9 | /// Provides an empty value for this Divisible instance 10 | static func conquer() -> Kind { 11 | F.conquer() 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Sources/Bow/Typeclasses/MonadComprehensions/ReaderBindingExpression.swift: -------------------------------------------------------------------------------- 1 | /// Utility alias for `MonadReader.ask` in a monad comprehension. 2 | /// 3 | /// - Returns: Result of `MonadReader.ask`. 4 | public func ask() -> Kind { 5 | F.ask() 6 | } 7 | -------------------------------------------------------------------------------- /Sources/Bow/Typeclasses/MonadComprehensions/WriterBindingExpression.swift: -------------------------------------------------------------------------------- 1 | /// Utility function for `MonadWriter.tell` in monad comprehensions. 2 | /// 3 | /// - Parameter w: Value for `MonadWriter.tell`. 4 | /// - Returns: A binding expression. 5 | public func tell(_ w: F.W) -> BindingExpression { 6 | |<-F.tell(w) 7 | } 8 | -------------------------------------------------------------------------------- /Sources/Bow/Typeclasses/MonadTrans.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | /// A monad transformer makes a new monad out of an existing monad, such that computations of the old monad may be embedded in the new one. 4 | public protocol MonadTrans: Monad { 5 | /// The input type parameter of this transformer. 6 | associatedtype F: Monad 7 | 8 | /// Lift a computation from the F monad to the constructed monad. 9 | static func liftF(_ fa: Kind) -> Kind 10 | } 11 | 12 | extension Kind where F: MonadTrans { 13 | /// Lift a computation from the F monad to this monad. 14 | static func liftF(_ fa: Kind) -> Kind { 15 | F.liftF(fa) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Sources/Bow/Typeclasses/Monoidal.swift: -------------------------------------------------------------------------------- 1 | /// The Monoidal type class adds an identity element to Semigroupal type class by defining the function identity. 2 | /// 3 | /// Identity returns a specific identity `Kind` value for a given type F and A. 4 | /// 5 | /// This type class complies with the following law: 6 | /// fa.product(identity) == identity.product(fa) == identity 7 | /// 8 | /// In addition, the laws of Semigroupal type class also apply. 9 | /// 10 | public protocol Monoidal: Semigroupal { 11 | 12 | /// Given a type A, create a "identity" for a F value 13 | static func identity() -> Kind 14 | } 15 | 16 | // MARK: Syntax for Monoidal 17 | public extension Kind where F: Monoidal { 18 | static func identity() -> Kind { 19 | F.identity() 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Sources/BowEffects/Data/Internal/Dictionary+Extensions.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | func -(lhs: Dictionary, rhs: K) -> Dictionary { 4 | var copy = lhs 5 | copy.removeValue(forKey: rhs) 6 | return copy 7 | } 8 | 9 | func +(lhs: Dictionary, rhs: (K, V)) -> Dictionary { 10 | var copy = lhs 11 | copy[rhs.0] = rhs.1 12 | return copy 13 | } 14 | 15 | extension Dictionary { 16 | var arrayValues: [Value] { 17 | Array(values) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Sources/BowEffects/Data/Internal/DispatchTimeInterval+Extensions.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | extension DispatchTimeInterval { 4 | func toDouble() -> Double? { 5 | switch self { 6 | case .seconds(let value): return Double(value) 7 | case .milliseconds(let value): return Double(value) * 0.001 8 | case .microseconds(let value): return Double(value) * 0.000_001 9 | case .nanoseconds(let value): return Double(value) * 0.000_000_001 10 | case .never: return nil 11 | @unknown default: return nil 12 | } 13 | } 14 | } 15 | 16 | func >=(lhs: DispatchTimeInterval, rhs: DispatchTimeInterval) -> Bool { 17 | let now = DispatchTime.now() 18 | return now + lhs >= now + rhs 19 | } 20 | 21 | func -(lhs: DispatchTime, rhs: DispatchTime) -> DispatchTimeInterval { 22 | let l = Int(lhs.rawValue) 23 | let r = Int(rhs.rawValue) 24 | return .nanoseconds(Int(l - r)) 25 | } 26 | -------------------------------------------------------------------------------- /Sources/BowGeneric/Generic.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public protocol Generic { 4 | associatedtype T 5 | associatedtype Repr 6 | 7 | func to(_ t: T) -> Repr 8 | func from(_ r: Repr) -> T 9 | } 10 | -------------------------------------------------------------------------------- /Sources/BowOptics/Auto/AutoGetter.swift: -------------------------------------------------------------------------------- 1 | /// Protocol for automatic derivation of Getter optics 2 | public protocol AutoGetter: AutoOptics {} 3 | 4 | public extension AutoGetter { 5 | /// Generates a Getter for the field given by the key path. 6 | /// 7 | /// - Parameter path: Key path of the field. 8 | /// - Returns: A Getter optic focused on the provided field. 9 | static func getter(for path: KeyPath) -> Getter { 10 | return Getter(get: { whole in whole[keyPath: path] }) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Sources/BowOptics/Auto/AutoLens.swift: -------------------------------------------------------------------------------- 1 | /// Protocol for automatic derivation of lenses. 2 | public protocol AutoLens: AutoOptics {} 3 | 4 | public extension AutoLens { 5 | /// Generates a Lens for the field indicated by its key path. 6 | /// 7 | /// - Parameter path: Key path identifying the field where the Lens focuses. 8 | /// - Returns: A Lens focusing in the field. 9 | static func lens(for path: WritableKeyPath) -> Lens { 10 | return Lens(get: { whole in whole[keyPath: path] }, 11 | set: { whole, part in whole.copy(with: part, for: path) }) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Sources/BowOptics/Auto/AutoOptics.swift: -------------------------------------------------------------------------------- 1 | /// Base protocol for optics automatic derivation. 2 | public protocol AutoOptics {} 3 | 4 | public extension AutoOptics { 5 | /// Creates a copy of this object, replacing the value at the given key path by the provided value. 6 | /// 7 | /// - Parameters: 8 | /// - value: New value for the field in the copy. 9 | /// - path: Key path of the field that will be modified in the copy. 10 | /// - Returns: A copy of this value with the modified field. 11 | func copy(with value: T, for path: WritableKeyPath) -> Self { 12 | var copy = self 13 | copy[keyPath: path] = value 14 | return copy 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Sources/BowOptics/DSL/Kind+Optics.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | 3 | // MARK: Optics extensions 4 | public extension Kind where F: Traverse { 5 | /// Provides a traversal based on the instance of `Traverse` for this type. 6 | static var traversalK: Traversal, A> { 7 | return KindTraversal() 8 | } 9 | } 10 | 11 | public extension Kind where F: Foldable { 12 | /// Provides a traversal based on the instance of `Foldable` for this type. 13 | static var foldK: Fold, A> { 14 | return Fold, A>.fromFoldable() 15 | } 16 | } 17 | 18 | private class KindTraversal: Traversal, A> { 19 | override func modifyF(_ s: Kind, _ f: @escaping (A) -> Kind) -> Kind> { 20 | return s.traverse(f) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Sources/BowOptics/Extensions/StateT+Optics.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | 3 | public extension StateT where F: Functor { 4 | /// Generalizes this StateT to a parent state, given a lens to focus from the parent to the child state. 5 | /// 6 | /// - Parameters: 7 | /// - lens: A Lens to focus from the parent state into the child state. 8 | /// - Returns: An `StateT` that produces the same computation but updates the state in a parent state. 9 | func focus(_ lens: Lens) -> StateT { 10 | self.focus(lens.get, lens.set) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Sources/BowOptics/Instances/ConstOpticsInstances.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | 3 | // MARK: Optics extensions 4 | public extension Const { 5 | /// Provides an Iso to go from/to this type to its `Kind` version. 6 | static var fixIso: Iso, ConstOf> { 7 | return Iso(get: id, reverseGet: Const.fix) 8 | } 9 | 10 | /// Provides a Fold based on the Foldable instance of this type. 11 | static var fold: Fold, T> { 12 | return fixIso + foldK 13 | } 14 | 15 | /// Provides a Traversal based on the Traverse instance of this type. 16 | static var traversal: Traversal, T> { 17 | return fixIso + traversalK 18 | } 19 | } 20 | 21 | // MARK: Instance of `Each` for `Const` 22 | extension Const: Each { 23 | public typealias EachFoci = T 24 | 25 | public static var each: Traversal, T> { 26 | return traversal 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Sources/BowOptics/Instances/EitherOpticsInstances.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import Bow 3 | 4 | // MARK: Optics extensions 5 | public extension Either { 6 | /// Provides an Iso to go from/to this type to its `Kind` version. 7 | static var fixIso: Iso, EitherOf> { 8 | return Iso(get: id, reverseGet: Either.fix) 9 | } 10 | 11 | /// Provides a Fold based on the Foldable instance of this type. 12 | static var fold: Fold, B> { 13 | return fixIso + foldK 14 | } 15 | 16 | /// Provides a Traversal based on the Traverse instance of this type. 17 | static var traversal: Traversal, B> { 18 | return fixIso + traversalK 19 | } 20 | } 21 | 22 | // MARK: Instance of `Each` for `Either` 23 | extension Either: Each { 24 | public typealias EachFoci = B 25 | 26 | public static var each: Traversal, B> { 27 | return traversal 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Sources/BowOptics/Instances/IdOpticsInstances.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | 3 | // MARK: Optics extensions 4 | public extension Id { 5 | /// Provides an Iso to go from/to this type to its `Kind` version. 6 | static var fixIso: Iso, IdOf> { 7 | return Iso(get: id, reverseGet: Id.fix) 8 | } 9 | 10 | /// Provides a Fold based on the Foldable instance of this type. 11 | static var fold: Fold, A> { 12 | return fixIso + foldK 13 | } 14 | 15 | /// Provides a Traversal based on the Traverse instance of this type. 16 | static var traversal: Traversal, A> { 17 | return fixIso + traversalK 18 | } 19 | } 20 | 21 | // MARK: Instance of `Each` for `Id` 22 | extension Id: Each { 23 | public typealias EachFoci = A 24 | 25 | public static var each: Traversal, A> { 26 | return traversal 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Sources/BowOptics/Instances/IorOpticsInstances.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | 3 | // MARK: Optics extensions 4 | public extension Ior { 5 | /// Provides an Iso to go from/to this type to its `Kind` version. 6 | static var fixIso: Iso, IorOf> { 7 | return Iso(get: id, reverseGet: Ior.fix) 8 | } 9 | 10 | /// Provides a Fold based on the Foldable instance of this type. 11 | static var fold: Fold, B> { 12 | return fixIso + foldK 13 | } 14 | 15 | /// Provides a Traversal based on the Traverse instance of this type. 16 | static var traversal: Traversal, B> { 17 | return fixIso + traversalK 18 | } 19 | } 20 | 21 | // MARK: Instance of `Each` for `Ior` 22 | extension Ior: Each { 23 | public typealias EachFoci = B 24 | 25 | public static var each: Traversal, B> { 26 | return traversal 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Sources/BowOptics/Instances/OptionOpticsInstances.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import Bow 3 | 4 | // MARK: Optics extensions 5 | public extension Option { 6 | /// Provides an Iso to go from/to this type to its `Kind` version. 7 | static var fixIso: Iso, OptionOf> { 8 | return Iso(get: id, reverseGet: Option.fix) 9 | } 10 | 11 | /// Provides a Fold based on the Foldable instance of this type. 12 | static var fold: Fold, A> { 13 | return fixIso + foldK 14 | } 15 | 16 | /// Provides a Traversal based on the Traverse instance of this type. 17 | static var traversal: Traversal, A> { 18 | return fixIso + traversalK 19 | } 20 | } 21 | 22 | // MARK: Instance of `Each` for `Option` 23 | extension Option: Each { 24 | public typealias EachFoci = A 25 | 26 | public static var each: Traversal, A> { 27 | return traversal 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Sources/BowOptics/Instances/TryOpticsInstances.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import Bow 3 | 4 | // MARK: Optics extensions 5 | public extension Try { 6 | /// Provides an Iso to go from/to this type to its `Kind` version. 7 | static var fixIso: Iso, TryOf> { 8 | return Iso(get: id, reverseGet: Try.fix) 9 | } 10 | 11 | /// Provides a Fold based on the Foldable instance of this type. 12 | static var fold: Fold, A> { 13 | return fixIso + foldK 14 | } 15 | 16 | /// Provides a Traversal based on the Traverse instance of this type. 17 | static var traversal: Traversal, A> { 18 | return fixIso + traversalK 19 | } 20 | } 21 | 22 | // MARK: Instance of `Each` for `Try` 23 | extension Try: Each { 24 | public typealias EachFoci = A 25 | 26 | public static var each: PTraversal, Try, A, A> { 27 | return traversal 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Sources/BowOptics/Instances/ValidatedOpticsInstances.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | 3 | // MARK: Optics extensions 4 | public extension Validated { 5 | /// Provides an Iso to go from/to this type to its `Kind` version. 6 | static var fixIso: Iso, ValidatedOf> { 7 | return Iso(get: id, reverseGet: Validated.fix) 8 | } 9 | 10 | /// Provides a Fold based on the Foldable instance of this type. 11 | static var fold: Fold, A> { 12 | return fixIso + foldK 13 | } 14 | 15 | /// Provides a Traversal based on the Traverse instance of this type. 16 | static var traversal: Traversal, A> { 17 | return fixIso + traversalK 18 | } 19 | } 20 | 21 | // MARK: Instance of `Each` for `Validated` 22 | extension Validated: Each { 23 | public typealias EachFoci = A 24 | 25 | public static var each: Traversal, A> { 26 | return traversal 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Sources/BowOptics/STD/Id+Optics.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import Bow 3 | 4 | // MARK: Optics extensions 5 | public extension Id { 6 | /// Provides a polymorphic Iso between Id and a raw type. 7 | /// 8 | /// - Returns: A polymorphic Iso between Id and a raw type. 9 | static func toPValue() -> PIso, Id, A, B> { 10 | return PIso, Id, A, B>( 11 | get: { x in x.value }, 12 | reverseGet: Id.init) 13 | } 14 | 15 | /// Provides an Iso bewteen Id and its wrapped type. 16 | static var toValue: Iso, A> { 17 | return toPValue() 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Sources/BowOptics/STD/NonEmptyArray+Optics.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import Bow 3 | 4 | // MARK: Optics extensions 5 | public extension NonEmptyArray { 6 | /// Provides a lens between a NonEmptyArray and its head. 7 | static var headLens: Lens, A> { 8 | return Lens, A>( 9 | get: { x in x.head }, 10 | set: { (nea, newHead) in NonEmptyArray(head: newHead, tail: nea.tail) }) 11 | } 12 | 13 | /// Provides a lens between a NonEmptyArray and its tail. 14 | static var tailLens: Lens, [A]> { 15 | return Lens, [A]>( 16 | get: { x in x.tail }, 17 | set: { (nea, newTail) in NonEmptyArray(head: nea.head, tail: newTail) }) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Sources/BowOptics/STD/String+Optics.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import Bow 3 | 4 | // MARK: Optics extensions 5 | public extension String { 6 | /// Provides an Iso between String and Array of Character. 7 | static var toArray: Iso { 8 | return Iso( 9 | get: { str in str.map(id) }, 10 | reverseGet: { characters in String(characters) }) 11 | } 12 | 13 | /// Provides an Iso between String and ArrayK of Character. 14 | static var toArrayK: Iso> { 15 | return String.toArray + Array.toArrayK 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Sources/BowOptics/Tuple/Tuple2.swift: -------------------------------------------------------------------------------- 1 | /// Utility optics over tuples of arity 2. 2 | public enum Tuple2 { 3 | /// Obtains a Lens that focuses on the first component of a tuple 4 | public static var _0: Lens<(A, B), A> { 5 | return Lens(get: { x in x.0 }, set: { x, a in (a, x.1) }) 6 | } 7 | 8 | /// Obtains a Lens that focuses on the second component of a tuple 9 | public static var _1: Lens<(A, B), B> { 10 | return Lens(get: { x in x.1 }, set: { x, b in (x.0, b) }) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Sources/BowOptics/Tuple/Tuple3.swift: -------------------------------------------------------------------------------- 1 | /// Utility optics over tuples of arity 3. 2 | public enum Tuple3 { 3 | /// Obtains a Lens that focuses on the first component of a tuple 4 | public static var _0: Lens<(A, B, C), A> { 5 | return Lens(get: { x in x.0 }, set: { x, a in (a, x.1, x.2) }) 6 | } 7 | 8 | /// Obtains a Lens that focuses on the second component of a tuple 9 | public static var _1: Lens<(A, B, C), B> { 10 | return Lens(get: { x in x.1 }, set: { x, b in (x.0, b, x.2) }) 11 | } 12 | 13 | /// Obtains a Lens that focuses on the third component of a tuple 14 | public static var _2: Lens<(A, B, C), C> { 15 | return Lens(get: { x in x.2 }, set: { x, c in (x.0, x.1, c) }) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Sources/BowRecursionSchemes/Recursion.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import Bow 3 | 4 | public typealias Algebra = (Kind) -> A 5 | public typealias Coalgebra = (A) -> Kind 6 | 7 | public extension Functor { 8 | static func hylo(_ algebra : @escaping Algebra>, 9 | _ coalgebra : @escaping Coalgebra, 10 | _ a : A) -> B { 11 | func h(_ a : A) -> Eval { 12 | return algebra(map(coalgebra(a), { x in Eval.defer({ h(x) }) })) 13 | } 14 | return h(a).value() 15 | } 16 | } 17 | 18 | // MARK: Syntax for F-Algebras 19 | public extension Kind where F: Functor { 20 | static func hylo(_ algebra: @escaping Algebra>, 21 | _ coalgebra: @escaping Coalgebra, 22 | _ a: A) -> B { 23 | return F.hylo(algebra, coalgebra, a) 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Sources/BowRecursionSchemes/Typeclasses/Birecursive.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public protocol Birecursive : Recursive, Corecursive {} 4 | -------------------------------------------------------------------------------- /Support Files/Bow-AllTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Support Files/Bow-Effects-Generators-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Support Files/Bow-Effects-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Support Files/Bow-EffectsLaws-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CFBundleDevelopmentRegion 5 | en 6 | CFBundleExecutable 7 | $(EXECUTABLE_NAME) 8 | CFBundleIdentifier 9 | $(PRODUCT_BUNDLE_IDENTIFIER) 10 | CFBundleInfoDictionaryVersion 11 | 6.0 12 | CFBundleName 13 | $(PRODUCT_NAME) 14 | CFBundlePackageType 15 | BNDL 16 | CFBundleShortVersionString 17 | 1.0 18 | CFBundleSignature 19 | ???? 20 | CFBundleVersion 21 | $(CURRENT_PROJECT_VERSION) 22 | NSPrincipalClass 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Support Files/Bow-EffectsTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CFBundleDevelopmentRegion 5 | en 6 | CFBundleExecutable 7 | $(EXECUTABLE_NAME) 8 | CFBundleIdentifier 9 | $(PRODUCT_BUNDLE_IDENTIFIER) 10 | CFBundleInfoDictionaryVersion 11 | 6.0 12 | CFBundleName 13 | $(PRODUCT_NAME) 14 | CFBundlePackageType 15 | BNDL 16 | CFBundleShortVersionString 17 | 1.0 18 | CFBundleSignature 19 | ???? 20 | CFBundleVersion 21 | $(CURRENT_PROJECT_VERSION) 22 | NSPrincipalClass 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Support Files/Bow-Free-Generators-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Support Files/Bow-Free-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Support Files/Bow-FreeTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CFBundleDevelopmentRegion 5 | en 6 | CFBundleExecutable 7 | $(EXECUTABLE_NAME) 8 | CFBundleIdentifier 9 | $(PRODUCT_BUNDLE_IDENTIFIER) 10 | CFBundleInfoDictionaryVersion 11 | 6.0 12 | CFBundleName 13 | $(PRODUCT_NAME) 14 | CFBundlePackageType 15 | BNDL 16 | CFBundleShortVersionString 17 | 1.0 18 | CFBundleSignature 19 | ???? 20 | CFBundleVersion 21 | $(CURRENT_PROJECT_VERSION) 22 | NSPrincipalClass 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Support Files/Bow-Generators-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Support Files/Bow-Generic-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Support Files/Bow-GenericTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CFBundleDevelopmentRegion 5 | en 6 | CFBundleExecutable 7 | $(EXECUTABLE_NAME) 8 | CFBundleIdentifier 9 | $(PRODUCT_BUNDLE_IDENTIFIER) 10 | CFBundleInfoDictionaryVersion 11 | 6.0 12 | CFBundleName 13 | $(PRODUCT_NAME) 14 | CFBundlePackageType 15 | BNDL 16 | CFBundleShortVersionString 17 | 1.0 18 | CFBundleSignature 19 | ???? 20 | CFBundleVersion 21 | $(CURRENT_PROJECT_VERSION) 22 | NSPrincipalClass 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Support Files/Bow-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Support Files/Bow-Laws-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CFBundleDevelopmentRegion 5 | en 6 | CFBundleExecutable 7 | $(EXECUTABLE_NAME) 8 | CFBundleIdentifier 9 | $(PRODUCT_BUNDLE_IDENTIFIER) 10 | CFBundleInfoDictionaryVersion 11 | 6.0 12 | CFBundleName 13 | $(PRODUCT_NAME) 14 | CFBundlePackageType 15 | BNDL 16 | CFBundleShortVersionString 17 | 1.0 18 | CFBundleSignature 19 | ???? 20 | CFBundleVersion 21 | $(CURRENT_PROJECT_VERSION) 22 | NSPrincipalClass 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Support Files/Bow-Optics-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Support Files/Bow-OpticsLaws-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CFBundleDevelopmentRegion 5 | en 6 | CFBundleExecutable 7 | $(EXECUTABLE_NAME) 8 | CFBundleIdentifier 9 | $(PRODUCT_BUNDLE_IDENTIFIER) 10 | CFBundleInfoDictionaryVersion 11 | 6.0 12 | CFBundleName 13 | $(PRODUCT_NAME) 14 | CFBundlePackageType 15 | BNDL 16 | CFBundleShortVersionString 17 | 1.0 18 | CFBundleSignature 19 | ???? 20 | CFBundleVersion 21 | $(CURRENT_PROJECT_VERSION) 22 | NSPrincipalClass 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Support Files/Bow-OpticsTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CFBundleDevelopmentRegion 5 | en 6 | CFBundleExecutable 7 | $(EXECUTABLE_NAME) 8 | CFBundleIdentifier 9 | $(PRODUCT_BUNDLE_IDENTIFIER) 10 | CFBundleInfoDictionaryVersion 11 | 6.0 12 | CFBundleName 13 | $(PRODUCT_NAME) 14 | CFBundlePackageType 15 | BNDL 16 | CFBundleShortVersionString 17 | 1.0 18 | CFBundleSignature 19 | ???? 20 | CFBundleVersion 21 | $(CURRENT_PROJECT_VERSION) 22 | NSPrincipalClass 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Support Files/Bow-RecursionSchemes-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Support Files/Bow-RecursionSchemesTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CFBundleDevelopmentRegion 5 | en 6 | CFBundleExecutable 7 | $(EXECUTABLE_NAME) 8 | CFBundleIdentifier 9 | $(PRODUCT_BUNDLE_IDENTIFIER) 10 | CFBundleInfoDictionaryVersion 11 | 6.0 12 | CFBundleName 13 | $(PRODUCT_NAME) 14 | CFBundlePackageType 15 | BNDL 16 | CFBundleShortVersionString 17 | 1.0 18 | CFBundleSignature 19 | ???? 20 | CFBundleVersion 21 | $(CURRENT_PROJECT_VERSION) 22 | NSPrincipalClass 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Support Files/Bow-Rx-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Support Files/Bow-RxGenerators-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Support Files/Bow-RxTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CFBundleDevelopmentRegion 5 | en 6 | CFBundleExecutable 7 | $(EXECUTABLE_NAME) 8 | CFBundleIdentifier 9 | $(PRODUCT_BUNDLE_IDENTIFIER) 10 | CFBundleInfoDictionaryVersion 11 | 6.0 12 | CFBundleName 13 | $(PRODUCT_NAME) 14 | CFBundlePackageType 15 | BNDL 16 | CFBundleShortVersionString 17 | 1.0 18 | CFBundleSignature 19 | ???? 20 | CFBundleVersion 21 | $(CURRENT_PROJECT_VERSION) 22 | NSPrincipalClass 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Support Files/Bow-Test-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CFBundleDevelopmentRegion 5 | en 6 | CFBundleExecutable 7 | $(EXECUTABLE_NAME) 8 | CFBundleIdentifier 9 | $(PRODUCT_BUNDLE_IDENTIFIER) 10 | CFBundleInfoDictionaryVersion 11 | 6.0 12 | CFBundleName 13 | $(PRODUCT_NAME) 14 | CFBundlePackageType 15 | BNDL 16 | CFBundleShortVersionString 17 | 1.0 18 | CFBundleSignature 19 | ???? 20 | CFBundleVersion 21 | $(CURRENT_PROJECT_VERSION) 22 | NSPrincipalClass 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Tests/BowEffectsGenerators/IO+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import BowEffects 3 | import BowGenerators 4 | import SwiftCheck 5 | 6 | // MARK: Instance of `ArbitraryK` for `IO` 7 | 8 | extension IOPartial: ArbitraryK where E: Arbitrary { 9 | public static func generate() -> Kind, A> { 10 | let success = IO.pure(A.arbitrary.generate) 11 | let failure = IO.raiseError(E.arbitrary.generate) 12 | let gen = Gen.one(of: [Gen.pure(success), Gen.pure(failure)]) 13 | return gen.generate 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Tests/BowEffectsTests/EnvIOTest.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import SwiftCheck 3 | @testable import BowLaws 4 | import Bow 5 | import BowEffects 6 | import BowEffectsGenerators 7 | import BowEffectsLaws 8 | 9 | extension KleisliPartial: EquatableK where F: EquatableK, D == Int { 10 | public static func eq( 11 | _ lhs: KleisliOf, 12 | _ rhs: KleisliOf) -> Bool { 13 | lhs^.run(1) == rhs^.run(1) 14 | } 15 | } 16 | 17 | class EnvIOTest: XCTestCase { 18 | func testMonadDeferLaws() { 19 | MonadDeferLaws>.check() 20 | } 21 | 22 | func testAsyncLaws() { 23 | AsyncLaws>.check() 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Tests/BowFreeGenerators/Cofree+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import BowFree 3 | import BowGenerators 4 | import SwiftCheck 5 | 6 | // MARK: Instance of ArbitraryK for Cofree 7 | 8 | extension CofreePartial: ArbitraryK where F: ArbitraryK { 9 | public static func generate() -> CofreeOf { 10 | Cofree.arbitrary.generate 11 | } 12 | } 13 | 14 | // MARK: Instance of Arbitrary for Cofree 15 | 16 | extension Cofree: Arbitrary where F: ArbitraryK, A: Arbitrary { 17 | public static var arbitrary: Gen> { 18 | Gen.zip( 19 | A.arbitrary, 20 | Gen.from(F.generate).map { fa in Eval.later { fa } } 21 | ).map(Cofree.init) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Tests/BowFreeGenerators/Free+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import BowFree 3 | import BowGenerators 4 | import SwiftCheck 5 | 6 | // MARK: Instance of `ArbitraryK` for `Free` 7 | 8 | extension FreePartial: ArbitraryK where F: ArbitraryK { 9 | public static func generate() -> FreeOf { 10 | Free.arbitrary.generate 11 | } 12 | } 13 | 14 | extension Free: Arbitrary where F: ArbitraryK, A: Arbitrary { 15 | public static var arbitrary: Gen> { 16 | let pureGen: Gen> = A.arbitrary.map(Free.pure >>> Free.fix) 17 | let liftGen: Gen> = Gen.from(F.generate).map(Free.free) 18 | 19 | return Gen.one(of: [pureGen, liftGen]) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Tests/BowFreeGenerators/Program+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | @testable import BowFree 3 | import BowGenerators 4 | import SwiftCheck 5 | 6 | // MARK: Instance of `ArbitraryK` for `Free` 7 | 8 | extension ProgramPartial: ArbitraryK where F: ArbitraryK { 9 | public static func generate() -> ProgramOf { 10 | Program.arbitrary.generate 11 | } 12 | } 13 | 14 | extension Program: Arbitrary where F: ArbitraryK, A: Arbitrary { 15 | public static var arbitrary: Gen> { 16 | Free, A>.arbitrary.map(Program.init) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Arrow/Function0+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension Function0: Arbitrary where A: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | A.arbitrary.map { a in Function0 { a } } 9 | } 10 | } 11 | 12 | // MARK: Instance of ArbitraryK for Function0 13 | 14 | extension Function0Partial: ArbitraryK { 15 | public static func generate() -> Function0Of { 16 | Function0.arbitrary.generate 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Arrow/Function1+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension Function1: Arbitrary where I: CoArbitrary & Hashable, O: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | ArrowOf.arbitrary.map { arrow in 9 | Function1(arrow.getArrow) 10 | } 11 | } 12 | } 13 | 14 | // MARK: Instance of ArbitraryK for Function1 15 | 16 | extension Function1Partial: ArbitraryK where I: CoArbitrary & Hashable { 17 | public static func generate() -> Function1Of { 18 | Function1.arbitrary.generate 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Arrow/Kleisli+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension Kleisli: Arbitrary where F: ArbitraryK, A: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | Gen.from(KleisliPartial.generate >>> Kleisli.fix) 9 | } 10 | } 11 | 12 | // MARK: Instance of ArbitraryK for Kleisli 13 | 14 | extension KleisliPartial: ArbitraryK where F: ArbitraryK { 15 | public static func generate() -> KleisliOf { 16 | let x: Kind = F.generate() 17 | return Kleisli { _ in x } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Arrow/LazyFunction1+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension LazyFunction1: Arbitrary where I: CoArbitrary & Hashable, O: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | ArrowOf.arbitrary.map { arrow in 9 | LazyFunction1(arrow.getArrow) 10 | } 11 | } 12 | } 13 | 14 | // MARK: Instance of ArbitraryK for LazyFunction1 15 | 16 | extension LazyFunction1Partial: ArbitraryK where I: CoArbitrary & Hashable { 17 | public static func generate() -> LazyFunction1Of { 18 | LazyFunction1.arbitrary.generate 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Data/ArrayK+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension ArrayK: Arbitrary where A: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | Array.arbitrary.map(ArrayK.init) 9 | } 10 | } 11 | 12 | // MARK: Instance of ArbitraryK for ArrayK 13 | 14 | extension ArrayKPartial: ArbitraryK { 15 | public static func generate() -> ArrayKOf { 16 | ArrayK.arbitrary.generate 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Data/Co+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Instance of `ArbitraryK` for `Co` 5 | extension CoTPartial: ArbitraryK where W: ArbitraryK, M: ArbitraryK { 6 | public static func generate() -> CoTOf { 7 | let wa: Kind = W.generate() 8 | return CoT.pure(wa.extract()) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Data/Const+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension Const: Arbitrary where A: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | A.arbitrary.map(Const.init) 9 | } 10 | } 11 | 12 | // MARK: Instance of ArbitraryK for Const 13 | 14 | extension ConstPartial: ArbitraryK where A: Arbitrary { 15 | public static func generate() -> ConstOf { 16 | Const.arbitrary.generate 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Data/CoyonedaGen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Instance of Arbitrary for Coyoneda 5 | 6 | extension Coyoneda: Arbitrary where F: ArbitraryK, A: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | KindOf.arbitrary.map { fa in 9 | Coyoneda.liftCoyoneda(fa.value) 10 | } 11 | } 12 | } 13 | 14 | // MARK: Instance of ArbitraryK for Coyoneda 15 | 16 | extension CoyonedaPartial: ArbitraryK where F: ArbitraryK { 17 | public static func generate() -> CoyonedaOf { 18 | Coyoneda.arbitrary.generate 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Data/Day+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Instance of ArbitraryK for Day 5 | 6 | extension DayPartial: ArbitraryK where F: ArbitraryK, G: ArbitraryK { 7 | public static func generate() -> DayOf { 8 | let left = F.generate().map { (a: A) in a as Any} 9 | let right = G.generate().map { (a: A) in a as Any } 10 | let f = (Int.arbitrary.generate % 2 == 0) ? { (x: Any, _: Any) in x as! A } : { (_: Any, x: Any) in x as! A } 11 | return Day(left: left, right: right, f) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Data/DictionaryK+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension DictionaryK: Arbitrary where A: Arbitrary, K: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | Dictionary.arbitrary.map(DictionaryK.init) 9 | } 10 | } 11 | 12 | // MARK: Instance of ArbitraryK for DictionaryK 13 | 14 | extension DictionaryKPartial: ArbitraryK where K: Hashable & Arbitrary { 15 | public static func generate() -> DictionaryKOf { 16 | DictionaryK.arbitrary.generate 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Data/Either+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension Either: Arbitrary where A: Arbitrary, B: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | let left = A.arbitrary.map(Either.left) 9 | let right = B.arbitrary.map(Either.right) 10 | return Gen.one(of: [left, right]) 11 | } 12 | } 13 | 14 | // MARK: Instance of ArbitraryK for Either 15 | 16 | extension EitherPartial: ArbitraryK where L: Arbitrary { 17 | public static func generate() -> EitherOf { 18 | Either.arbitrary.generate 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Data/EitherK+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension EitherK: Arbitrary where F: ArbitraryK, G: ArbitraryK, A: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | Gen.from(EitherKPartial.generate >>> EitherK.fix) 9 | } 10 | } 11 | 12 | // MARK: Instance of ArbitraryK for EitherK 13 | 14 | extension EitherKPartial: ArbitraryK where F: ArbitraryK, G: ArbitraryK { 15 | public static func generate() -> EitherKOf { 16 | let left = EitherK(F.generate()) 17 | let right = EitherK(G.generate()) 18 | return Gen.one(of: [Gen.pure(left), Gen.pure(right)]).generate 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Data/Endo+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension Endo: Arbitrary where A: CoArbitrary & Hashable & Arbitrary { 7 | public static var arbitrary: Gen> { 8 | ArrowOf.arbitrary.map { arrow in Endo(arrow.getArrow) } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Data/Eval+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension EvalPartial: ArbitraryK { 7 | public static func generate() -> EvalOf { 8 | let nowGen = A.arbitrary.map(Eval.now) 9 | let laterGen = A.arbitrary.map { x in Eval.later { x } } 10 | let alwaysGen = A.arbitrary.map { x in Eval.always { x } } 11 | let deferGen = A.arbitrary.map { x in Eval.defer { Eval.now(x) } } 12 | let generated = Gen.one(of: [nowGen, laterGen, alwaysGen, deferGen]).generate 13 | return generated 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Data/Exists+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Instance of Arbitrary for Exists 5 | 6 | extension Exists: Arbitrary where F: ArbitraryK { 7 | public static var arbitrary: Gen> { 8 | Gen.one(of: [ 9 | KindOf.arbitrary.map { Exists($0.value) }, 10 | KindOf.arbitrary.map { Exists($0.value) }, 11 | KindOf>.arbitrary.map { Exists($0.value) }, 12 | KindOf>.arbitrary.map { Exists($0.value) }, 13 | KindOf>.arbitrary.map { Exists($0.value) }, 14 | KindOf>.arbitrary.map { Exists($0.value) }, 15 | KindOf>.arbitrary.map { Exists($0.value) }, 16 | ]) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Data/Id+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension Id: Arbitrary where A: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | A.arbitrary.map(Id.init) 9 | } 10 | } 11 | 12 | // MARK: Instance of ArbitraryK for Id 13 | 14 | extension IdPartial: ArbitraryK { 15 | public static func generate() -> IdOf { 16 | Id.arbitrary.generate 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Data/Ior+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension Ior: Arbitrary where A: Arbitrary, B: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | let left = A.arbitrary.map(Ior.left) 9 | let right = B.arbitrary.map(Ior.right) 10 | let both = Gen.zip(A.arbitrary, B.arbitrary).map(Ior.both) 11 | return Gen.one(of: [left, right, both]) 12 | } 13 | } 14 | 15 | // MARK: Instance of ArbitraryK for Ior 16 | 17 | extension IorPartial: ArbitraryK where L: Arbitrary { 18 | public static func generate() -> IorOf { 19 | Ior.arbitrary.generate 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Data/Moore+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension Moore: Arbitrary where E: CoArbitrary & Hashable, V: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | Gen.from(MoorePartial.generate >>> Moore.fix) 9 | } 10 | } 11 | 12 | // MARK: Instance of ArbitraryK for Moore 13 | 14 | extension MoorePartial: ArbitraryK where E: CoArbitrary & Hashable { 15 | public static func generate() -> MooreOf { 16 | func handle(_ x: E) -> Moore { 17 | Moore(view: A.arbitrary.generate, handle: handle) 18 | } 19 | 20 | return Moore(view: A.arbitrary.generate, handle: handle) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Data/NonEmptyArray+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension NonEmptyArray: Arbitrary where A: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | Array.arbitrary 9 | .suchThat { array in array.count > 0 } 10 | .map(NonEmptyArray.fromArrayUnsafe) 11 | } 12 | } 13 | 14 | // MARK: Instance of ArbitraryK for NonEmptyArray 15 | 16 | extension NonEmptyArrayPartial: ArbitraryK { 17 | public static func generate() -> NonEmptyArrayOf { 18 | NonEmptyArray.arbitrary.generate 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Data/Option+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension Option: Arbitrary where A: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | let none = Gen.pure(Option.none()) 9 | let some = A.arbitrary.map(Option.some) 10 | return Gen.one(of: [none, some]) 11 | } 12 | } 13 | 14 | // MARK: Instance of ArbitraryK for Option 15 | 16 | extension OptionPartial: ArbitraryK { 17 | public static func generate() -> OptionOf { 18 | Option.arbitrary.generate 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Data/PairK+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension PairK: Arbitrary where F: ArbitraryK, G: ArbitraryK, A: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | Gen.from(PairKPartial.generate >>> PairK.fix) 9 | } 10 | } 11 | 12 | // MARK: Instance of ArbitraryK for PairK 13 | 14 | extension PairKPartial: ArbitraryK where F: ArbitraryK, G: ArbitraryK { 15 | public static func generate() -> PairKOf { 16 | PairK(F.generate(), G.generate()) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Data/Sum+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension Sum: Arbitrary where F: ArbitraryK, G: ArbitraryK, V: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | Gen.from(SumPartial.generate >>> Sum.fix) 9 | } 10 | } 11 | 12 | // MARK: Instance of ArbitraryK for Sum 13 | 14 | extension SumPartial: ArbitraryK where F: ArbitraryK, G: ArbitraryK { 15 | public static func generate() -> SumOf { 16 | let fa: Kind = F.generate() 17 | let ga: Kind = G.generate() 18 | let left = Sum.left(fa, ga) 19 | let right = Sum.right(fa, ga) 20 | return Gen.one(of: [Gen.pure(left), Gen.pure(right)]).generate 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Data/Try+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension Try: Arbitrary where A: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | let failure = Gen.pure(Try.failure(TryError.illegalState)) 9 | let success = A.arbitrary.map(Try.success) 10 | return Gen.one(of: [failure, success]) 11 | } 12 | } 13 | 14 | // MARK: Instance of ArbitraryK for Try 15 | 16 | extension TryPartial: ArbitraryK { 17 | public static func generate() -> TryOf { 18 | Try.arbitrary.generate 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Data/Validated+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension Validated: Arbitrary where E: Arbitrary, A: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | let invalid = E.arbitrary.map(Validated.invalid) 9 | let valid = A.arbitrary.map(Validated.valid) 10 | return Gen.one(of: [invalid, valid]) 11 | } 12 | } 13 | 14 | // MARK: Instance of ArbitraryK for Validated 15 | 16 | extension ValidatedPartial: ArbitraryK where I: Arbitrary { 17 | public static func generate() -> ValidatedOf { 18 | Validated.arbitrary.generate 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Data/Yoneda+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Instance of Arbitrary for Yoneda 5 | 6 | extension Yoneda: Arbitrary where F: ArbitraryK, A: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | KindOf.arbitrary.map { fa in 9 | Yoneda.liftYoneda(fa.value) 10 | } 11 | } 12 | } 13 | 14 | // MARK: Instance of ArbitraryK for Yoneda 15 | 16 | extension YonedaPartial: ArbitraryK where F: ArbitraryK { 17 | public static func generate() -> YonedaOf { 18 | Yoneda.arbitrary.generate 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Data/Zipper+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension Zipper: Arbitrary where A: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | Gen.zip([A].arbitrary, A.arbitrary, [A].arbitrary) 9 | .map(Zipper.init(left:focus:right:)) 10 | } 11 | } 12 | 13 | // MARK: Instance of ArbitraryK for ArrayK 14 | 15 | extension ZipperPartial: ArbitraryK { 16 | public static func generate() -> ZipperOf { 17 | Zipper.arbitrary.generate 18 | } 19 | } 20 | 21 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Transformers/EitherT+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension EitherT: Arbitrary where F: ArbitraryK, A: Arbitrary, B: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | Gen.from(EitherTPartial.generate >>> EitherT.fix) 9 | } 10 | } 11 | 12 | // MARK: Instance of ArbitraryK for EitherT 13 | 14 | extension EitherTPartial: ArbitraryK where F: ArbitraryK, L: Arbitrary { 15 | public static func generate() -> EitherTOf { 16 | EitherT(F.generate()) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Transformers/EnvT+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension EnvT: Arbitrary where E: Arbitrary, W: ArbitraryK, A: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | Gen.from(EnvTPartial.generate >>> EnvT.fix) 9 | } 10 | } 11 | 12 | // MARK: Instance of ArbitraryK for EnvT 13 | 14 | extension EnvTPartial: ArbitraryK where E: Arbitrary, W: ArbitraryK { 15 | public static func generate() -> EnvTOf { 16 | EnvT(E.arbitrary.generate, W.generate()) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Transformers/OptionT+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension OptionT: Arbitrary where F: ArbitraryK, A: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | Gen.from(OptionTPartial.generate >>> OptionT.fix) 9 | } 10 | } 11 | 12 | // MARK: Instance of ArbitraryK for OptionT 13 | 14 | extension OptionTPartial: ArbitraryK where F: ArbitraryK { 15 | public static func generate() -> OptionTOf { 16 | OptionT(F.generate()) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Transformers/StateT+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension StateT: Arbitrary where F: ArbitraryK & Applicative, S: Arbitrary, A: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | Gen.from(StateTPartial.generate >>> StateT.fix) 9 | } 10 | } 11 | 12 | // MARK: Instance of ArbitraryK for StateT 13 | 14 | extension StateTPartial: ArbitraryK where F: ArbitraryK & Applicative, S: Arbitrary { 15 | public static func generate() -> StateTOf { 16 | let a = A.arbitrary.generate 17 | let f: (S) -> Kind = { s in F.pure((s, a)) } 18 | return StateT(f) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Transformers/StoreT+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension StoreT: Arbitrary where S: CoArbitrary & Hashable & Arbitrary, W: Functor & ArbitraryK, A: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | Gen.from(StoreTPartial.generate >>> StoreT.fix) 9 | } 10 | } 11 | 12 | // MARK: Instance of ArbitraryK for Store 13 | 14 | extension StoreTPartial: ArbitraryK where S: CoArbitrary & Hashable & Arbitrary, W: Functor & ArbitraryK { 15 | public static func generate() -> StoreTOf { 16 | StoreT(S.arbitrary.generate, 17 | KindOf>.arbitrary.generate.value.map { f in f.getArrow }) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Transformers/TracedT+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Property-based Testing 5 | 6 | extension TracedT: Arbitrary where M: Arbitrary & Hashable & CoArbitrary, W: ArbitraryK & Functor, A: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | Gen.from(TracedTPartial.generate >>> TracedT.fix) 9 | } 10 | } 11 | 12 | // MARK: Instance of ArbitraryK for TracedT 13 | 14 | extension TracedTPartial: ArbitraryK where M: Arbitrary & Hashable & CoArbitrary, W: ArbitraryK & Functor { 15 | 16 | public static func generate() -> TracedTOf { 17 | TracedT(KindOf>.arbitrary.generate.value.map { f in f.getArrow }) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Tests/BowGenerators/Transformers/WriterT+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | // MARK: Generator for Propery-based Testing 5 | 6 | extension WriterT: Arbitrary where F: ArbitraryK & Applicative, W: Arbitrary, A: Arbitrary { 7 | public static var arbitrary: Gen> { 8 | Gen.from(WriterTPartial.generate >>> WriterT.fix) 9 | } 10 | } 11 | 12 | // MARK: Instance of ArbitraryK for WriterT 13 | 14 | extension WriterTPartial: ArbitraryK where F: ArbitraryK & Applicative, W: Arbitrary { 15 | public static func generate() -> WriterTOf { 16 | WriterT(F.pure((W.arbitrary.generate, A.arbitrary.generate))) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Tests/BowGenericTests/GenericTest.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import Bow 3 | import BowGeneric 4 | 5 | class GenericTest : XCTestCase { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Tests/BowLaws/BimonadLaws.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import BowGenerators 3 | 4 | public class BimonadLaws { 5 | public static func check() { 6 | MonadLaws.check() 7 | ComonadLaws.check() 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Tests/BowLaws/ContravariantLaws.swift: -------------------------------------------------------------------------------- 1 | import SwiftCheck 2 | import Bow 3 | import BowGenerators 4 | 5 | public class ContravariantLaws { 6 | 7 | public static func check() { 8 | InvariantLaws.check() 9 | identity() 10 | composition() 11 | } 12 | 13 | private static func identity() { 14 | property("Identity") <~ forAll { (fa: KindOf) in 15 | 16 | fa.value.contramap(id) 17 | == 18 | id(fa.value) 19 | } 20 | } 21 | 22 | private static func composition() { 23 | property("Composition") <~ forAll { (fa: KindOf, f: ArrowOf, g: ArrowOf) in 24 | 25 | fa.value.contramap(f.getArrow).contramap(g.getArrow) 26 | == 27 | fa.value.contramap(f.getArrow <<< g.getArrow) 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Tests/BowLaws/CustomStringConvertibleLaws.swift: -------------------------------------------------------------------------------- 1 | import SwiftCheck 2 | import Bow 3 | 4 | public class CustomStringConvertibleLaws { 5 | public static func check(){ 6 | equality() 7 | } 8 | 9 | private static func equality() { 10 | property("Equal objects must show equal content") <~ forAll { (a: A) in 11 | let x1 = a 12 | let x2 = a 13 | return x1.description == x2.description 14 | } 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /Tests/BowLaws/DivideLaws.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import BowGenerators 3 | import SwiftCheck 4 | 5 | public final class DivideLaws { 6 | public static func check(isEqual: @escaping (Kind, Kind) -> Bool) { 7 | associativity(isEqual: isEqual) 8 | } 9 | 10 | private static func associativity(isEqual: @escaping (Kind, Kind) -> Bool) { 11 | func tuple(_ a: A, _ b: B) -> (A, B) { 12 | (a, b) 13 | } 14 | 15 | property("Associativity") <~ forAll { (fa: KindOf) in 16 | 17 | isEqual( 18 | F.divide(fa.value.divide(fa.value, tuple), fa.value, tuple), 19 | fa.value.divide(fa.value.divide(fa.value, tuple), tuple) 20 | ) 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Tests/BowLaws/EqualityFunctions.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | 3 | public func isEqual( 4 | _ fa: Kind, 5 | _ fb: Kind) -> Bool { 6 | fa.map { 0 } == fb.map { 0 } 7 | } 8 | 9 | public func isEqual( 10 | _ fa: Kind, 11 | _ fb: Kind) -> Bool { 12 | 13 | fa.map { x in x.0 } == fb.map { y in y.0 } && 14 | fa.map { x in x.1 } == fb.map { y in y.1 } 15 | } 16 | 17 | public func isEqual( 18 | _ fa: Kind, 19 | _ fb: Kind) -> Bool { 20 | fa.map { x in x.0 }.map { xx in xx.0 } == fb.map { y in y.0 } && 21 | fa.map { x in x.0 }.map { xx in xx.1 } == fb.map { y in y.1 }.map { yy in yy.0 } && 22 | fa.map { x in x.1 } == fb.map { y in y.1 }.map { yy in yy.1 } 23 | } 24 | -------------------------------------------------------------------------------- /Tests/BowLaws/MonadCombineLaws.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import BowGenerators 3 | 4 | public class MonadCombineLaws { 5 | public static func check() { 6 | AlternativeLaws.check() 7 | MonadFilterLaws.check() 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Tests/BowLaws/MonoidLaws.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import SwiftCheck 3 | 4 | public class MonoidLaws { 5 | public static func check() { 6 | leftIdentity() 7 | rightIdentity() 8 | } 9 | 10 | private static func leftIdentity() { 11 | property("Left identity") <~ forAll { (a: A) in 12 | A.empty().combine(a) == a 13 | } 14 | } 15 | 16 | private static func rightIdentity() { 17 | property("Right identity") <~ forAll { (a: A) in 18 | a.combine(A.empty()) == a 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Tests/BowLaws/PropertyOperatorOverload.swift: -------------------------------------------------------------------------------- 1 | import SwiftCheck 2 | 3 | infix operator <~ 4 | 5 | public func <~(checker: AssertiveQuickCheck, test: @autoclosure @escaping () -> Testable) { 6 | checker <- test 7 | } 8 | 9 | public func <~(checker: AssertiveQuickCheck, test: () -> Testable) { 10 | checker <- test 11 | } 12 | 13 | public func <~(checker: ReportiveQuickCheck, test: () -> Testable) { 14 | checker <- test 15 | } 16 | 17 | public func <~(checker: ReportiveQuickCheck, test: @autoclosure @escaping () -> Testable) { 18 | checker <~ test 19 | } 20 | -------------------------------------------------------------------------------- /Tests/BowLaws/SemigroupKLaws.swift: -------------------------------------------------------------------------------- 1 | import SwiftCheck 2 | import Bow 3 | import BowGenerators 4 | 5 | public class SemigroupKLaws { 6 | public static func check() { 7 | associative() 8 | } 9 | 10 | private static func associative() { 11 | property("SemigroupK combine is associative") <~ forAll { (fa: KindOf, fb: KindOf, fc: KindOf) in 12 | 13 | fa.value.combineK(fb.value.combineK(fc.value)) 14 | == 15 | fa.value.combineK(fb.value).combineK(fc.value) 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Tests/BowLaws/SemigroupLaws.swift: -------------------------------------------------------------------------------- 1 | import SwiftCheck 2 | import Bow 3 | 4 | public class SemigroupLaws { 5 | public static func check() { 6 | associativity() 7 | reduction() 8 | } 9 | 10 | private static func associativity() { 11 | property("Associativity") <~ forAll { (a: A, b: A, c: A) in 12 | a.combine(b).combine(c) 13 | == 14 | a.combine(b.combine(c)) 15 | } 16 | } 17 | 18 | private static func reduction() { 19 | property("Reduction") <~ forAll { (a: A, b: A, c: A) in 20 | A.combineAll(a, b, c) 21 | == 22 | a.combine(b).combine(c) 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Tests/BowLaws/SemigroupalLaws.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import BowGenerators 3 | import SwiftCheck 4 | 5 | public final class SemigroupalLaws { 6 | public static func check(isEqual: @escaping (Kind, Kind) -> Bool) { 7 | associativity(isEqual: isEqual) 8 | } 9 | 10 | private static func associativity(isEqual: @escaping (Kind, Kind) -> Bool) { 11 | property("Associativity") <~ forAll { (fa: KindOf, fb: KindOf, fc: KindOf) in 12 | 13 | isEqual( 14 | fa.value.product(fb.value).product(fc.value), 15 | fa.value.product(fb.value.product(fc.value))) 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Tests/BowRecursionSchemesTests/RecursionTest.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import Bow 3 | import BowRecursionSchemes 4 | 5 | class RecursionTest: XCTestCase { 6 | func testA() { 7 | XCTAssert(true) 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Tests/BowRxGenerators/MaybeK+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import BowGenerators 3 | import BowRx 4 | import SwiftCheck 5 | 6 | // MARK: Generator for Property-based Testing 7 | 8 | extension MaybeK: Arbitrary where A: Arbitrary { 9 | public static var arbitrary: Gen> { 10 | A.arbitrary.map { x in MaybeK.pure(x)^ } 11 | } 12 | } 13 | 14 | // MARK: Instance of `ArbitraryK` for `MaybeK` 15 | 16 | extension MaybeKPartial: ArbitraryK { 17 | public static func generate() -> MaybeKOf { 18 | MaybeK.arbitrary.generate 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Tests/BowRxGenerators/ObservableK+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import BowGenerators 3 | import BowRx 4 | import SwiftCheck 5 | 6 | // MARK: Generator for Property-based Testing 7 | 8 | extension ObservableK: Arbitrary where A: Arbitrary { 9 | public static var arbitrary: Gen> { 10 | A.arbitrary.map { x in ObservableK.pure(x)^ } 11 | } 12 | } 13 | 14 | // MARK: Instance of `ArbitraryK` for `ObservableK` 15 | 16 | extension ObservableKPartial: ArbitraryK { 17 | public static func generate() -> ObservableKOf { 18 | ObservableK.arbitrary.generate 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Tests/BowRxGenerators/SingleK+Gen.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import BowGenerators 3 | import BowRx 4 | import SwiftCheck 5 | 6 | // MARK: Generator for Property-based Testing 7 | 8 | extension SingleK: Arbitrary where A: Arbitrary { 9 | public static var arbitrary: Gen> { 10 | A.arbitrary.map { x in SingleK.pure(x)^ } 11 | } 12 | } 13 | 14 | // MARK: Instance of `ArbitraryK` for `SingleK` 15 | 16 | extension SingleKPartial: ArbitraryK { 17 | public static func generate() -> SingleKOf { 18 | SingleK.arbitrary.generate 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Tests/BowRxTests/MaybeKTest.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import BowLaws 3 | import Bow 4 | @testable import BowRx 5 | import BowRxGenerators 6 | import BowEffectsLaws 7 | 8 | extension MaybeKPartial: EquatableK { 9 | public static func eq( 10 | _ lhs: MaybeKOf, 11 | _ rhs: MaybeKOf) -> Bool { 12 | lhs^.value.blockingGet() == rhs^.value.blockingGet() 13 | } 14 | } 15 | 16 | class MaybeKTest: XCTestCase { 17 | func testFunctorLaws() { 18 | FunctorLaws.check() 19 | } 20 | 21 | func testApplicativeLaws() { 22 | ApplicativeLaws.check() 23 | } 24 | 25 | func testSelectiveLaws() { 26 | SelectiveLaws.check() 27 | } 28 | 29 | func testMonadLaws() { 30 | MonadLaws.check() 31 | } 32 | 33 | func testFoldableLaws() { 34 | FoldableLaws.check() 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Tests/BowRxTests/SingleKTest.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import BowLaws 3 | import Bow 4 | @testable import BowRx 5 | import BowRxGenerators 6 | import BowEffectsLaws 7 | 8 | extension SingleKPartial: EquatableK { 9 | public static func eq( 10 | _ lhs: SingleKOf, 11 | _ rhs: SingleKOf) -> Bool { 12 | lhs^.value.blockingGet() == rhs^.value.blockingGet() 13 | } 14 | } 15 | 16 | class SingleKTest: XCTestCase { 17 | func testFunctorLaws() { 18 | FunctorLaws.check() 19 | } 20 | 21 | func testApplicativeLaws() { 22 | ApplicativeLaws.check() 23 | } 24 | 25 | func testSelectiveLaws() { 26 | SelectiveLaws.check() 27 | } 28 | 29 | func testMonadLaws() { 30 | MonadLaws.check() 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Tests/BowTests/Arrow/Function1Test.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | @testable import BowLaws 3 | import Bow 4 | 5 | extension Function1Partial: EquatableK where I == Int { 6 | public static func eq(_ lhs: Kind, A>, _ rhs: Kind, A>) -> Bool where A : Equatable { 7 | return Function1.fix(lhs).invoke(1) == Function1.fix(rhs).invoke(1) 8 | } 9 | } 10 | 11 | class Function1Test: XCTestCase { 12 | func testFunctorLaws() { 13 | FunctorLaws>.check() 14 | } 15 | 16 | func testApplicativeLaws() { 17 | ApplicativeLaws>.check() 18 | } 19 | 20 | func testSelectiveLaws() { 21 | SelectiveLaws>.check() 22 | } 23 | 24 | func testMonadLaws() { 25 | MonadLaws>.check() 26 | } 27 | 28 | func testSemigroupLaws() { 29 | SemigroupLaws>.check() 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Tests/BowTests/Data/ArrayTest.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import Bow 3 | import BowLaws 4 | 5 | class ArrayTest: XCTestCase { 6 | func testSemigroupLaws() { 7 | SemigroupLaws<[Int]>.check() 8 | } 9 | 10 | func testMonoidLaws() { 11 | MonoidLaws<[Int]>.check() 12 | } 13 | 14 | func testSequence() { 15 | let x: Array> = [.some(1), .none(), .some(2)] 16 | XCTAssertEqual(x.sequence()^, .none()) 17 | 18 | let y: Array> = [.some(1), .some(2)] 19 | XCTAssertEqual(y.sequence()^, .some([1, 2])) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Tests/BowTests/Data/CoyonedaNaturalTransformationTests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import SwiftCheck 3 | import BowLaws 4 | import Bow 5 | 6 | class CoyonedaNaturalTransformationTests: XCTestCase { 7 | 8 | func testNaturality() { 9 | let n = ArrayKPartial.firstOrNone.coyoneda 10 | let f: (Int) -> String = { "\($0)" } 11 | 12 | property("Naturality") <~ forAll { (fa: Coyoneda) in 13 | n(fa).map(f) == n(fa.map(f)) 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Tests/BowTests/Data/DictionaryTest.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import Bow 3 | import BowLaws 4 | 5 | class DictionaryTest: XCTestCase { 6 | func testSemigroupLaws() { 7 | SemigroupLaws>.check() 8 | } 9 | 10 | func testMonoidLaws() { 11 | MonoidLaws>.check() 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Tests/BowTests/Data/EitherKTest.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import BowLaws 3 | import Bow 4 | import BowGenerators 5 | import SwiftCheck 6 | 7 | class EitherKTest: XCTestCase { 8 | func testEquatableLaws() { 9 | EquatableKLaws, Int>.check() 10 | } 11 | 12 | func testHashableLaws() { 13 | HashableKLaws, Int>.check() 14 | } 15 | 16 | func testFunctorLaws() { 17 | FunctorLaws>.check() 18 | } 19 | 20 | func testComonadLaws() { 21 | ComonadLaws>.check() 22 | } 23 | 24 | func testFoldableLaws() { 25 | FoldableLaws>.check() 26 | } 27 | 28 | func testTraverseLaws() { 29 | TraverseLaws>.check() 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Tests/BowTests/Data/EndoTest.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import SwiftCheck 3 | import BowLaws 4 | import Bow 5 | 6 | extension EndoPartial: EquatableK { 7 | public static func eq(_ a: EndoOf, _ b: EndoOf) -> Bool { 8 | a^.run(1 as! A) == b^.run(1 as! A) 9 | } 10 | } 11 | 12 | class EndoTest: XCTestCase { 13 | func testSemigroupLaws() { 14 | SemigroupLaws>.check() 15 | } 16 | 17 | func testMonoidLaws() { 18 | MonoidLaws>.check() 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Tests/BowTests/Data/EvalTest.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import BowLaws 3 | import Bow 4 | 5 | class EvalTest: XCTestCase { 6 | func testFunctorLaws() { 7 | FunctorLaws.check() 8 | } 9 | 10 | func testApplicativeLaws() { 11 | ApplicativeLaws.check() 12 | } 13 | 14 | func testSelectiveLaws() { 15 | SelectiveLaws.check() 16 | } 17 | 18 | func testMonadLaws() { 19 | MonadLaws.check() 20 | } 21 | 22 | func testComonadLaws() { 23 | ComonadLaws.check() 24 | } 25 | 26 | func testBimonadLaws() { 27 | BimonadLaws.check() 28 | } 29 | 30 | func testEquatableKLaws() { 31 | EquatableKLaws.check() 32 | } 33 | 34 | func testHashableKLaws() { 35 | HashableKLaws.check() 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Tests/BowTests/Data/ResultTest.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import SwiftCheck 3 | import Bow 4 | import BowLaws 5 | 6 | enum ResultError: Int, Error { 7 | case warning 8 | case fatal 9 | case unknown 10 | } 11 | 12 | extension ResultError: Arbitrary { 13 | static var arbitrary: Gen { 14 | return Gen.fromElements(of: [.warning, .fatal, .unknown]) 15 | } 16 | } 17 | 18 | class ResultTest: XCTestCase { 19 | func testResultEitherIsomorphism() { 20 | property("Either and Result are isomorphic") <~ forAll { (x: Either) in 21 | return x.toResult().toEither() == x 22 | } 23 | } 24 | 25 | func testResultValidateIsomorphism() { 26 | property("Validated and Result are isomorphic") <~ forAll { (x: Validated) in 27 | return x.toResult().toValidated() == x 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Tests/BowTests/Data/SetKTest.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import SwiftCheck 3 | import BowLaws 4 | import Bow 5 | 6 | class SetKTest: XCTestCase { 7 | 8 | var generator: (Int) -> SetK { 9 | return { a in SetK(Set([a])) } 10 | } 11 | 12 | // func testEquatableLaws() { 13 | // EquatableKLaws.check(generator: self.generator) 14 | // } 15 | // 16 | // func testSemigroupLaws() { 17 | // property("SetK semigroup laws") <- forAll() { (a : Int, b : Int, c : Int) in 18 | // return SemigroupLaws>.check( 19 | // a: SetK(Set([a])), 20 | // b: SetK(Set([b])), 21 | // c: SetK(Set([c]))) 22 | // } 23 | // } 24 | // 25 | // func testMonoidLaws() { 26 | // property("SetK monoid laws") <- forAll() { (a : Int) in 27 | // return MonoidLaws>.check(a: SetK(Set([a]))) 28 | // } 29 | // } 30 | } 31 | -------------------------------------------------------------------------------- /Tests/BowTests/Data/SetTest.swift: -------------------------------------------------------------------------------- 1 | import Bow 2 | import BowLaws 3 | import XCTest 4 | 5 | class SetTest: XCTestCase { 6 | func testSemigroupLaws() { 7 | SemigroupLaws>.check() 8 | } 9 | 10 | func testMonoidLaws() { 11 | MonoidLaws>.check() 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Tests/BowTests/Instances/BoolInstancesTest.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import BowLaws 3 | import Bow 4 | 5 | class BoolInstancesTest: XCTestCase { 6 | 7 | func testBoolEqLaws() { 8 | EquatableLaws.check() 9 | } 10 | 11 | func testBoolSemiringLaws() { 12 | SemiringLaws.check() 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Tests/BowTests/Instances/StringInstancesTest.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import BowLaws 3 | import Bow 4 | 5 | class StringInstancesTest: XCTestCase { 6 | 7 | func testEqLaws() { 8 | EquatableLaws.check() 9 | } 10 | 11 | func testSemigroupLaws() { 12 | SemigroupLaws.check() 13 | } 14 | 15 | func testMonoidLaws() { 16 | MonoidLaws.check() 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | ## Needed due to a bug in GH Pages Travis/Jekyll process 2 | ffitarget.h 3 | -------------------------------------------------------------------------------- /docs/CNAME: -------------------------------------------------------------------------------- 1 | bow-swift.io -------------------------------------------------------------------------------- /docs/Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem "jekyll", "~> 3.7.4" 4 | gem "jazzy", "~> 0.9.4" 5 | # Needed to support swift_versions param 6 | gem "cocoapods", "~> 1.8.1" 7 | -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | title: Bow 2 | #------------------------- 3 | name: Bow 4 | #------------------------- 5 | description: Bow is a library for Typed Functional Programming in Swift 6 | #------------------------- 7 | author: 47 Degrees 8 | keywords: functional-programming, swift-library, monads, monad-transformers, functional-data-structure, swift, fp-types, adt, free-monads, tagless-final, mtl, for-comprehension, category-theory 9 | #------------------------- 10 | url: https://www.47deg.com 11 | #------------------------- 12 | markdown: kramdown 13 | sass: 14 | sass_dir: _sass 15 | style: compressed 16 | #------------------------- 17 | permalink: pretty 18 | #------------------------- 19 | exclude: ['config.ru', 'Gemfile', 'Gemfile.lock', 'vendor', 'Procfile', 'Rakefile', '.bundle', 'extra'] 20 | #------------------------- 21 | google_analytics: UA-18433785-19 22 | #------------------------- 23 | github_repository: https://github.com/bow-swift/bow 24 | -------------------------------------------------------------------------------- /docs/_data/features.yml: -------------------------------------------------------------------------------- 1 | content: 2 | - title: Patterns 3 | description: Solutions to recurrent problems, in a purely Functional Programming manner. 4 | icon: /img/feature-icon-primary.svg 5 | 6 | - title: Typeclasses 7 | description: Enable ad-hoc polymorphism with protocols like Functor, Applicative, Monad and many others. 8 | icon: /img/feature-icon-secondary.svg 9 | 10 | - title: Data Types 11 | description: Take advantage of numerous data types based on algebraic properties. 12 | icon: /img/feature-icon-tertiary.svg 13 | 14 | - title: Integrations 15 | description: Bow integrates nicely with popular Swift libraries like RxSwift. 16 | icon: /img/feature-icon-quarter.svg -------------------------------------------------------------------------------- /docs/_data/menu.yml: -------------------------------------------------------------------------------- 1 | nav: 2 | - title: Documentation 3 | url: /docs 4 | icon: "fa-book" 5 | 6 | - title: API Reference 7 | url: /api-docs 8 | icon: "fa-file-code" 9 | 10 | - title: GitHub 11 | url: https://github.com/bow-swift/bow 12 | icon: "fa-github" 13 | 14 | - title: License 15 | url: https://github.com/bow-swift/bow/blob/master/LICENSE 16 | icon: "fa-creative-commons" 17 | -------------------------------------------------------------------------------- /docs/_includes/_doc-wrapper.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 6 |
7 |
8 | {{ content }} 9 |
10 |
11 | -------------------------------------------------------------------------------- /docs/_includes/_footer.html: -------------------------------------------------------------------------------- 1 |
20 | -------------------------------------------------------------------------------- /docs/_includes/_google-tag-manager.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | -------------------------------------------------------------------------------- /docs/_includes/_js-bottom-docs.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /docs/_includes/_main.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {% for item in site.data.features.content %} 5 |
6 | 7 |

{{ item.title }}

8 |

{{ item.description }}

9 |
10 | {% endfor %} 11 |
12 |
13 |
14 | -------------------------------------------------------------------------------- /docs/_layouts/docs.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {% include _head-docs.html %} 4 | 5 |
6 | {% include _sidebar-wrapper.html %} 7 | {% include _doc-wrapper.html %} 8 |
9 | {% include _js-bottom-docs.html %} 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/_layouts/home.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {% include _head.html %} 4 | 5 | {% include _nav.html %} 6 | {% include _header.html %} 7 | {% include _main.html %} 8 | {% include _footer.html %} 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/_sass/components/_code.scss: -------------------------------------------------------------------------------- 1 | // Code 2 | // ----------------------------------------------- 3 | // ----------------------------------------------- 4 | 5 | p, 6 | ul { 7 | code { 8 | background: $white; 9 | border: 1px solid #eee; 10 | border-radius: 1px; 11 | font-family: $code-font-family; 12 | padding: 0.1em 0.2em; 13 | font-size: 0.9rem; 14 | font-weight: $font-bold; 15 | } 16 | } 17 | 18 | .highlighter-rouge div.highlight { 19 | display: block; 20 | overflow-x: auto; 21 | color: #312d2c; 22 | background: #fff; 23 | padding: 24 | ($base-point-grid * 1.5) 0 ($base-point-grid * 1.5) 25 | ($base-point-grid * 2); 26 | font-family: $code-font-family; 27 | font-size: 0.9rem; 28 | margin: 0 0 12px; 29 | } 30 | -------------------------------------------------------------------------------- /docs/_sass/components/_doc-body.scss: -------------------------------------------------------------------------------- 1 | 2 | // DOC-BODY 3 | // ----------------------------------------------- 4 | // ----------------------------------------------- 5 | #doc-body { 6 | background: #fafafa; 7 | } 8 | -------------------------------------------------------------------------------- /docs/_sass/components/_table.scss: -------------------------------------------------------------------------------- 1 | table { 2 | font-size: 1rem; 3 | text-align: left; 4 | overflow-x: auto; 5 | 6 | th { 7 | border-bottom: 3px solid rgba($brand-primary, 0.3); 8 | border-radius: 0; 9 | font-weight: $font-semibold; 10 | } 11 | 12 | tr { 13 | border-bottom: 1px solid rgba($brand-primary, 0.3); 14 | border-radius: 0; 15 | } 16 | 17 | th, 18 | td { 19 | padding: $base-point-grid $base-point-grid * 4; 20 | 21 | &:first-of-type { 22 | padding-left: $base-point-grid * 2; 23 | } 24 | 25 | &:last-of-type { 26 | padding-right: $base-point-grid * 2; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /docs/_sass/utils/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // ----------------------------------------------- 3 | // ----------------------------------------------- 4 | @import "mixins/flexbox"; 5 | @import "mixins/breakpoint"; 6 | @import "mixins/helpers"; 7 | -------------------------------------------------------------------------------- /docs/_sass/utils/mixins/_breakpoint.scss: -------------------------------------------------------------------------------- 1 | // Breakpoint 2 | // ----------------------------------------------- 3 | // ----------------------------------------------- 4 | @mixin bp($point) { 5 | @if $point==xlarge { 6 | @media (max-width: $bp-xlarge) { 7 | @content; 8 | } 9 | } 10 | 11 | @if $point==large { 12 | @media (max-width: $bp-large) { 13 | @content; 14 | } 15 | } 16 | 17 | @if $point==medium { 18 | @media (max-width: $bp-medium) { 19 | @content; 20 | } 21 | } 22 | 23 | @if $point==small { 24 | @media (max-width: $bp-small) { 25 | @content; 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /docs/_sass/utils/mixins/_helpers.scss: -------------------------------------------------------------------------------- 1 | // Helpers 2 | // ----------------------------------------------- 3 | // ----------------------------------------------- 4 | 5 | // Transform 6 | //------------------------------------------------ 7 | @mixin rotate($degrees) { 8 | -webkit-transform: rotate($degrees); 9 | -moz-transform: rotate($degrees); 10 | -ms-transform: rotate($degrees); 11 | -o-transform: rotate($degrees); 12 | transform: rotate($degrees); 13 | } 14 | 15 | // Hover 16 | //------------------------------------------------ 17 | @mixin links($link, $visited, $hover, $active) { 18 | & { 19 | color: $link; 20 | 21 | &:visited { 22 | color: $visited; 23 | } 24 | 25 | &:hover { 26 | color: $hover; 27 | } 28 | 29 | &:active, 30 | &:focus { 31 | color: $active; 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_attention-seekers/_bounce.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(bounce) { 2 | 0%, 20%, 50%, 80%, 100% {@include transform(translateY(0));} 3 | 40% {@include transform(translateY(-30px));} 4 | 60% {@include transform(translateY(-15px));} 5 | } 6 | 7 | @mixin bounce($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 8 | @include animation-name(bounce); 9 | @include count($count); 10 | @include duration($duration); 11 | @include delay($delay); 12 | @include function($function); 13 | @include fill-mode($fill); 14 | @include visibility($visibility); 15 | } -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_attention-seekers/_flash.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(flash) { 2 | 0%, 50%, 100% {opacity: 1;} 3 | 25%, 75% {opacity: 0;} 4 | } 5 | 6 | @mixin flash($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 7 | @include animation-name(flash); 8 | @include count($count); 9 | @include duration($duration); 10 | @include delay($delay); 11 | @include function($function); 12 | @include fill-mode($fill); 13 | @include visibility($visibility); 14 | } 15 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_attention-seekers/_pulse.scss: -------------------------------------------------------------------------------- 1 | // originally authored by Nick Pettit - https://github.com/nickpettit/glide 2 | 3 | @include keyframes(pulse) { 4 | 0% {@include transform(scale(1));} 5 | 50% {@include transform(scale(1.1));} 6 | 100% {@include transform(scale(1));} 7 | } 8 | 9 | @mixin pulse($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 10 | @include animation-name(pulse); 11 | @include count($count); 12 | @include duration($duration); 13 | @include delay($delay); 14 | @include function($function); 15 | @include fill-mode($fill); 16 | @include visibility($visibility); 17 | } 18 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_attention-seekers/_rubberBand.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(rubberBand) { 2 | 0% {@include transform(scale3d(1, 1, 1));} 3 | 30% {@include transform(scale3d(1.25, 0.75, 1));} 4 | 40% {@include transform(scale3d(0.75, 1.25, 1));} 5 | 50% {@include transform(scale3d(1.15, 0.85, 1));} 6 | 65% {@include transform(scale3d(.95, 1.05, 1));} 7 | 75% {@include transform(scale3d(1.05, .95, 1));} 8 | 100% {@include transform(scale3d(1, 1, 1));} 9 | } 10 | 11 | @mixin rubberBand($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 12 | @include animation-name(rubberBand); 13 | @include count($count); 14 | @include duration($duration); 15 | @include delay($delay); 16 | @include function($function); 17 | @include fill-mode($fill); 18 | @include visibility($visibility); 19 | } 20 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_attention-seekers/_shake.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(shake) { 2 | 0%, 100% {@include transform(translateX(0));} 3 | 10%, 30%, 50%, 70%, 90% {@include transform(translateX(-10px));} 4 | 20%, 40%, 60%, 80% {@include transform(translateX(10px));} 5 | } 6 | 7 | @mixin shake($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 8 | @include animation-name(shake); 9 | @include count($count); 10 | @include duration($duration); 11 | @include delay($delay); 12 | @include function($function); 13 | @include fill-mode($fill); 14 | @include visibility($visibility); 15 | } 16 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_attention-seekers/_swing.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(swing) { 2 | 20%, 40%, 60%, 80%, 100% {@include transform-origin(top center);} 3 | 20% {@include transform(rotate(15deg));} 4 | 40% {@include transform(rotate(-10deg));} 5 | 60% {@include transform(rotate(5deg));} 6 | 80% {@include transform(rotate(-5deg));} 7 | 100% {@include transform(rotate(0deg));} 8 | } 9 | 10 | @mixin swing($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 11 | @include transform-origin(top center); 12 | @include animation-name(swing); 13 | @include count($count); 14 | @include duration($duration); 15 | @include delay($delay); 16 | @include function($function); 17 | @include fill-mode($fill); 18 | @include visibility($visibility); 19 | } 20 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_attention-seekers/_tada.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(tada) { 2 | 0% {@include transform(scale(1));} 3 | 10%, 20% {@include transform(scale(0.9) rotate(-3deg));} 4 | 30%, 50%, 70%, 90% {@include transform(scale(1.1) rotate(3deg));} 5 | 40%, 60%, 80% {@include transform(scale(1.1) rotate(-3deg));} 6 | 100% {@include transform(scale(1) rotate(0));} 7 | } 8 | 9 | @mixin tada($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 10 | @include animation-name(tada); 11 | @include count($count); 12 | @include duration($duration); 13 | @include delay($delay); 14 | @include function($function); 15 | @include fill-mode($fill); 16 | @include visibility($visibility); 17 | } 18 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_attention-seekers/attention-seekers.scss: -------------------------------------------------------------------------------- 1 | // INDEX OF ATTENTION SEEKERS 2 | 3 | @import 4 | "_bounce", 5 | "_flash", 6 | "_jello", 7 | "_pulse", 8 | "_rubberBand", 9 | "_shake", 10 | "_swing", 11 | "_tada", 12 | "_wobble"; 13 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_bouncing-entrances/_bounceIn.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(bounceIn) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(scale(.3)); 5 | } 6 | 50% { 7 | opacity: 1; 8 | @include transform(scale(1.05)); 9 | } 10 | 70% { 11 | @include transform(scale(.9)); 12 | } 13 | 100% { 14 | @include transform(scale(1)); 15 | } 16 | } 17 | 18 | @mixin bounceIn($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 19 | @include animation-name(bounceIn); 20 | @include count($count); 21 | @include duration($duration); 22 | @include delay($delay); 23 | @include function($function); 24 | @include fill-mode($fill); 25 | @include visibility($visibility); 26 | } 27 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_bouncing-entrances/_bounceInDown.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(bounceInDown) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(translateY(-2000px)); 5 | } 6 | 60% { 7 | opacity: 1; 8 | @include transform(translateY(30px)); 9 | } 10 | 80% { 11 | @include transform(translateY(-10px)); 12 | } 13 | 100% { 14 | @include transform(translateY(0)); 15 | } 16 | } 17 | 18 | @mixin bounceInDown($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 19 | @include animation-name(bounceInDown); 20 | @include count($count); 21 | @include duration($duration); 22 | @include delay($delay); 23 | @include function($function); 24 | @include fill-mode($fill); 25 | @include visibility($visibility); 26 | } 27 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_bouncing-entrances/_bounceInLeft.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(bounceInLeft) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(translateX(-2000px)); 5 | } 6 | 60% { 7 | opacity: 1; 8 | @include transform(translateX(30px)); 9 | } 10 | 80% { 11 | @include transform(translateX(-10px)); 12 | } 13 | 100% { 14 | @include transform(translateX(0)); 15 | } 16 | } 17 | 18 | @mixin bounceInLeft($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 19 | @include animation-name(bounceInLeft); 20 | @include count($count); 21 | @include duration($duration); 22 | @include delay($delay); 23 | @include function($function); 24 | @include fill-mode($fill); 25 | @include visibility($visibility); 26 | } 27 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_bouncing-entrances/_bounceInRight.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(bounceInRight) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(translateX(2000px)); 5 | } 6 | 60% { 7 | opacity: 1; 8 | @include transform(translateX(-30px)); 9 | } 10 | 80% { 11 | @include transform(translateX(10px)); 12 | } 13 | 100% { 14 | @include transform(translateX(0)); 15 | } 16 | } 17 | 18 | @mixin bounceInRight($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 19 | @include animation-name(bounceInRight); 20 | @include count($count); 21 | @include duration($duration); 22 | @include delay($delay); 23 | @include function($function); 24 | @include fill-mode($fill); 25 | @include visibility($visibility); 26 | } -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_bouncing-entrances/_bounceInUp.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(bounceInUp) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(translateY(2000px)); 5 | } 6 | 60% { 7 | opacity: 1; 8 | @include transform(translateY(-30px)); 9 | } 10 | 80% { 11 | @include transform(translateY(10px)); 12 | } 13 | 100% { 14 | @include transform(translateY(0)); 15 | } 16 | } 17 | 18 | @mixin bounceInUp($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 19 | @include animation-name(bounceInUp); 20 | @include count($count); 21 | @include duration($duration); 22 | @include delay($delay); 23 | @include function($function); 24 | @include fill-mode($fill); 25 | @include visibility($visibility); 26 | } 27 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_bouncing-entrances/bouncing-entrances.scss: -------------------------------------------------------------------------------- 1 | // INDEX OF BOUNCING ENTRANCES 2 | 3 | @import 4 | "_bounceIn", 5 | "_bounceInDown", 6 | "_bounceInLeft", 7 | "_bounceInRight", 8 | "_bounceInUp"; 9 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_bouncing-exits/_bounceOut.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(bounceOut) { 2 | 0% { 3 | @include transform(scale(1)); 4 | } 5 | 25% { 6 | @include transform(scale(.95)); 7 | } 8 | 50% { 9 | opacity: 1; 10 | @include transform(scale(1.1)); 11 | } 12 | 100% { 13 | opacity: 0; 14 | @include transform(scale(.3)); 15 | } 16 | } 17 | 18 | @mixin bounceOut($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 19 | @include animation-name(bounceOut); 20 | @include count($count); 21 | @include duration($duration); 22 | @include delay($delay); 23 | @include function($function); 24 | @include fill-mode($fill); 25 | @include visibility($visibility); 26 | } 27 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_bouncing-exits/_bounceOutDown.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(bounceOutDown) { 2 | 0% { 3 | @include transform(translateY(0)); 4 | } 5 | 20% { 6 | opacity: 1; 7 | @include transform(translateY(-20px)); 8 | } 9 | 100% { 10 | opacity: 0; 11 | @include transform(translateY(2000px)); 12 | } 13 | } 14 | 15 | @mixin bounceOutDown($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 16 | @include animation-name(bounceOutDown); 17 | @include count($count); 18 | @include duration($duration); 19 | @include delay($delay); 20 | @include function($function); 21 | @include fill-mode($fill); 22 | @include visibility($visibility); 23 | } 24 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_bouncing-exits/_bounceOutLeft.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(bounceOutLeft) { 2 | 0% { 3 | @include transform(translateX(0)); 4 | } 5 | 20% { 6 | opacity: 1; 7 | @include transform(translateX(20px)); 8 | } 9 | 100% { 10 | opacity: 0; 11 | @include transform(translateX(-2000px)); 12 | } 13 | } 14 | 15 | @mixin bounceOutLeft($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 16 | @include animation-name(bounceOutLeft); 17 | @include count($count); 18 | @include duration($duration); 19 | @include delay($delay); 20 | @include function($function); 21 | @include fill-mode($fill); 22 | @include visibility($visibility); 23 | } 24 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_bouncing-exits/_bounceOutRight.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(bounceOutRight) { 2 | 0% { 3 | @include transform(translateX(0)); 4 | } 5 | 20% { 6 | opacity: 1; 7 | @include transform(translateX(-20px)); 8 | } 9 | 100% { 10 | opacity: 0; 11 | @include transform(translateX(2000px)); 12 | } 13 | } 14 | 15 | @mixin bounceOutRight($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 16 | @include animation-name(bounceOutRight); 17 | @include count($count); 18 | @include duration($duration); 19 | @include delay($delay); 20 | @include function($function); 21 | @include fill-mode($fill); 22 | @include visibility($visibility); 23 | } 24 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_bouncing-exits/_bounceOutUp.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(bounceOutUp) { 2 | 0% { 3 | @include transform(translateY(0)); 4 | } 5 | 20% { 6 | opacity: 1; 7 | @include transform(translateY(20px)); 8 | } 9 | 100% { 10 | opacity: 0; 11 | @include transform(translateY(-2000px)); 12 | } 13 | } 14 | 15 | @mixin bounceOutUp($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 16 | @include animation-name(bounceOutUp); 17 | @include count($count); 18 | @include duration($duration); 19 | @include delay($delay); 20 | @include function($function); 21 | @include fill-mode($fill); 22 | @include visibility($visibility); 23 | } 24 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_bouncing-exits/bouncing-exits.scss: -------------------------------------------------------------------------------- 1 | // INDEX OF BOUNCING EXITS 2 | 3 | @import 4 | "_bounceOut", 5 | "_bounceOutDown", 6 | "_bounceOutLeft", 7 | "_bounceOutRight", 8 | "_bounceOutUp"; 9 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_fading-entrances/_fadeIn.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(fadeIn) { 2 | 0% {opacity: 0;} 3 | 100% {opacity: 1;} 4 | } 5 | 6 | @mixin fadeIn($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 7 | @include animation-name(fadeIn); 8 | @include count($count); 9 | @include duration($duration); 10 | @include delay($delay); 11 | @include function($function); 12 | @include fill-mode($fill); 13 | @include visibility($visibility); 14 | } 15 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_fading-entrances/_fadeInDown.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(fadeInDown) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(translateY(-20px)); 5 | } 6 | 100% { 7 | opacity: 1; 8 | @include transform(translateY(0)); 9 | } 10 | } 11 | 12 | @mixin fadeInDown($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 13 | @include animation-name(fadeInDown); 14 | @include count($count); 15 | @include duration($duration); 16 | @include delay($delay); 17 | @include function($function); 18 | @include fill-mode($fill); 19 | @include visibility($visibility); 20 | } 21 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_fading-entrances/_fadeInDownBig.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(fadeInDownBig) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(translateY(-2000px)); 5 | } 6 | 100% { 7 | opacity: 1; 8 | @include transform(translateY(0)); 9 | } 10 | } 11 | 12 | @mixin fadeInDownBig($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 13 | @include animation-name(fadeInDownBig); 14 | @include count($count); 15 | @include duration($duration); 16 | @include delay($delay); 17 | @include function($function); 18 | @include fill-mode($fill); 19 | @include visibility($visibility); 20 | } 21 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_fading-entrances/_fadeInLeft.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(fadeInLeft) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(translateX(-20px)); 5 | } 6 | 100% { 7 | opacity: 1; 8 | @include transform(translateX(0)); 9 | } 10 | } 11 | 12 | @mixin fadeInLeft($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 13 | @include animation-name(fadeInLeft); 14 | @include count($count); 15 | @include duration($duration); 16 | @include delay($delay); 17 | @include function($function); 18 | @include fill-mode($fill); 19 | @include visibility($visibility); 20 | } 21 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_fading-entrances/_fadeInLeftBig.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(fadeInLeftBig) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(translateX(-2000px)); 5 | } 6 | 100% { 7 | opacity: 1; 8 | @include transform(translateX(0)); 9 | } 10 | } 11 | 12 | @mixin fadeInLeftBig($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 13 | @include animation-name(fadeInLeftBig); 14 | @include count($count); 15 | @include duration($duration); 16 | @include delay($delay); 17 | @include function($function); 18 | @include fill-mode($fill); 19 | @include visibility($visibility); 20 | } 21 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_fading-entrances/_fadeInRight.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(fadeInRight) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(translateX(20px)); 5 | } 6 | 100% { 7 | opacity: 1; 8 | @include transform(translateX(0)); 9 | } 10 | } 11 | 12 | @mixin fadeInRight($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 13 | @include animation-name(fadeInRight); 14 | @include count($count); 15 | @include duration($duration); 16 | @include delay($delay); 17 | @include function($function); 18 | @include fill-mode($fill); 19 | @include visibility($visibility); 20 | } 21 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_fading-entrances/_fadeInRightBig.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(fadeInRightBig) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(translateX(2000px)); 5 | } 6 | 100% { 7 | opacity: 1; 8 | @include transform(translateX(0)); 9 | } 10 | } 11 | 12 | @mixin fadeInRightBig($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 13 | @include animation-name(fadeInRightBig); 14 | @include count($count); 15 | @include duration($duration); 16 | @include delay($delay); 17 | @include function($function); 18 | @include fill-mode($fill); 19 | @include visibility($visibility); 20 | } 21 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_fading-entrances/_fadeInUp.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(fadeInUp) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(translateY(20px));} 5 | 100% { 6 | opacity: 1; 7 | @include transform(translateY(0)); 8 | } 9 | } 10 | 11 | @mixin fadeInUp($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 12 | @include animation-name(fadeInUp); 13 | @include count($count); 14 | @include duration($duration); 15 | @include delay($delay); 16 | @include function($function); 17 | @include fill-mode($fill); 18 | @include visibility($visibility); 19 | } 20 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_fading-entrances/_fadeInUpBig.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(fadeInUpBig) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(translateY(2000px)); 5 | } 6 | 100% { 7 | opacity: 1; 8 | @include transform(translateY(0)); 9 | } 10 | } 11 | 12 | @mixin fadeInUpBig($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 13 | @include animation-name(fadeInUpBig); 14 | @include count($count); 15 | @include duration($duration); 16 | @include delay($delay); 17 | @include function($function); 18 | @include fill-mode($fill); 19 | @include visibility($visibility); 20 | } 21 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_fading-entrances/fading-entrances.scss: -------------------------------------------------------------------------------- 1 | // INDEX OF FADING ENTRANCES 2 | 3 | @import 4 | "_fadeIn", 5 | "_fadeInDown", 6 | "_fadeInDownBig", 7 | "_fadeInLeft", 8 | "_fadeInLeftBig", 9 | "_fadeInRight", 10 | "_fadeInRightBig", 11 | "_fadeInUp", 12 | "_fadeInUpBig"; 13 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_fading-exits/_fadeOut.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(fadeOut) { 2 | 0% {opacity: 1;} 3 | 100% {opacity: 0;} 4 | } 5 | 6 | @mixin fadeOut($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 7 | @include animation-name(fadeOut); 8 | @include count($count); 9 | @include duration($duration); 10 | @include delay($delay); 11 | @include function($function); 12 | @include fill-mode($fill); 13 | @include visibility($visibility); 14 | } 15 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_fading-exits/_fadeOutDown.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(fadeOutDown) { 2 | 0% { 3 | opacity: 1; 4 | @include transform(translateY(0)); 5 | } 6 | 100% { 7 | opacity: 0; 8 | @include transform(translateY(20px)); 9 | } 10 | } 11 | 12 | @mixin fadeOutDown($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 13 | @include animation-name(fadeOutDown); 14 | @include count($count); 15 | @include duration($duration); 16 | @include delay($delay); 17 | @include function($function); 18 | @include fill-mode($fill); 19 | @include visibility($visibility); 20 | } 21 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_fading-exits/_fadeOutDownBig.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(fadeOutDownBig) { 2 | 0% { 3 | opacity: 1; 4 | @include transform(translateY(0)); 5 | } 6 | 100% { 7 | opacity: 0; 8 | @include transform(translateY(2000px)); 9 | } 10 | } 11 | 12 | @mixin fadeOutDownBig($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 13 | @include animation-name(fadeOutDownBig); 14 | @include count($count); 15 | @include duration($duration); 16 | @include delay($delay); 17 | @include function($function); 18 | @include fill-mode($fill); 19 | @include visibility($visibility); 20 | } 21 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_fading-exits/_fadeOutLeft.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(fadeOutLeft) { 2 | 0% { 3 | opacity: 1; 4 | @include transform(translateX(0)); 5 | } 6 | 100% { 7 | opacity: 0; 8 | @include transform(translateX(-20px)); 9 | } 10 | } 11 | 12 | @mixin fadeOutLeft($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 13 | @include animation-name(fadeOutLeft); 14 | @include count($count); 15 | @include duration($duration); 16 | @include delay($delay); 17 | @include function($function); 18 | @include fill-mode($fill); 19 | @include visibility($visibility); 20 | } 21 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_fading-exits/_fadeOutLeftBig.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(fadeOutLeftBig) { 2 | 0% { 3 | opacity: 1; 4 | @include transform(translateX(0)); 5 | } 6 | 100% { 7 | opacity: 0; 8 | @include transform(translateX(-2000px)); 9 | } 10 | } 11 | 12 | @mixin fadeOutLeftBig($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 13 | @include animation-name(fadeOutLeftBig); 14 | @include count($count); 15 | @include duration($duration); 16 | @include delay($delay); 17 | @include function($function); 18 | @include fill-mode($fill); 19 | @include visibility($visibility); 20 | } 21 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_fading-exits/_fadeOutRight.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(fadeOutRight) { 2 | 0% { 3 | opacity: 1; 4 | @include transform(translateX(0)); 5 | } 6 | 100% { 7 | opacity: 0; 8 | @include transform(translateX(20px)); 9 | } 10 | } 11 | 12 | @mixin fadeOutRight($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 13 | @include animation-name(fadeOutRight); 14 | @include count($count); 15 | @include duration($duration); 16 | @include delay($delay); 17 | @include function($function); 18 | @include fill-mode($fill); 19 | @include visibility($visibility); 20 | } 21 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_fading-exits/_fadeOutRightBig.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(fadeOutRightBig) { 2 | 0% { 3 | opacity: 1; 4 | @include transform(translateX(0)); 5 | } 6 | 100% { 7 | opacity: 0; 8 | @include transform(translateX(2000px)); 9 | } 10 | } 11 | 12 | @mixin fadeOutRightBig($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 13 | @include animation-name(fadeOutRightBig); 14 | @include count($count); 15 | @include duration($duration); 16 | @include delay($delay); 17 | @include function($function); 18 | @include fill-mode($fill); 19 | @include visibility($visibility); 20 | } 21 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_fading-exits/_fadeOutUp.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(fadeOutUp) { 2 | 0% { 3 | opacity: 1; 4 | @include transform(translateY(0)); 5 | } 6 | 100% { 7 | opacity: 0; 8 | @include transform(translateY(-20px)); 9 | } 10 | } 11 | 12 | @mixin fadeOutUp($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 13 | @include animation-name(fadeOutUp); 14 | @include count($count); 15 | @include duration($duration); 16 | @include delay($delay); 17 | @include function($function); 18 | @include fill-mode($fill); 19 | @include visibility($visibility); 20 | } 21 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_fading-exits/_fadeOutUpBig.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(fadeOutUpBig) { 2 | 0% { 3 | opacity: 1; 4 | @include transform(translateY(0)); 5 | } 6 | 100% { 7 | opacity: 0; 8 | @include transform(translateY(-2000px)); 9 | } 10 | } 11 | 12 | @mixin fadeOutUpBig($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 13 | @include animation-name(fadeOutUpBig); 14 | @include count($count); 15 | @include duration($duration); 16 | @include delay($delay); 17 | @include function($function); 18 | @include fill-mode($fill); 19 | @include visibility($visibility); 20 | } 21 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_fading-exits/fading-exits.scss: -------------------------------------------------------------------------------- 1 | // INDEX OF FADING EXITS 2 | 3 | @import 4 | "_fadeOut", 5 | "_fadeOutDown", 6 | "_fadeOutDownBig", 7 | "_fadeOutLeft", 8 | "_fadeOutLeftBig", 9 | "_fadeOutRight", 10 | "_fadeOutRightBig", 11 | "_fadeOutUp", 12 | "_fadeOutUpBig"; 13 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_flippers/_flipInX.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(flipInX) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(perspective(400px) rotateX(90deg)); 5 | } 6 | 40% { 7 | @include transform(perspective(400px) rotateX(-10deg)); 8 | } 9 | 70% { 10 | @include transform(perspective(400px) rotateX(10deg)); 11 | } 12 | 100% { 13 | opacity: 1; 14 | @include transform(perspective(400px) rotateX(0deg)); 15 | } 16 | } 17 | 18 | @mixin flipInX($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 19 | @include animation-name(flipInX); 20 | @include count($count); 21 | @include duration($duration); 22 | @include delay($delay); 23 | @include function($function); 24 | @include fill-mode($fill); 25 | @include visibility($visibility); 26 | } 27 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_flippers/_flipInY.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(flipInY) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(perspective(400px) rotateY(90deg)); 5 | } 6 | 40% { 7 | @include transform(perspective(400px) rotateY(-10deg)); 8 | } 9 | 70% { 10 | @include transform(perspective(400px) rotateY(10deg)); 11 | } 12 | 100% { 13 | opacity: 1; 14 | @include transform(perspective(400px) rotateY(0deg)); 15 | } 16 | } 17 | 18 | @mixin flipInY($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 19 | @include animation-name(flipInY); 20 | @include count($count); 21 | @include duration($duration); 22 | @include delay($delay); 23 | @include function($function); 24 | @include fill-mode($fill); 25 | @include visibility($visibility); 26 | } 27 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_flippers/_flipOutX.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(flipOutX) { 2 | 0% { 3 | opacity: 1; 4 | @include transform(perspective(400px) rotateX(0deg)); 5 | } 6 | 100% { 7 | opacity: 0; 8 | @include transform(perspective(400px) rotateX(90deg)); 9 | } 10 | } 11 | 12 | @mixin flipOutX($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 13 | @include animation-name(flipOutX); 14 | @include count($count); 15 | @include duration($duration); 16 | @include delay($delay); 17 | @include function($function); 18 | @include fill-mode($fill); 19 | @include visibility($visibility); 20 | } 21 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_flippers/_flipOutY.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(flipOutY) { 2 | 0% { 3 | opacity: 1; 4 | @include transform(perspective(400px) rotateY(0deg)); 5 | } 6 | 100% { 7 | opacity: 0; 8 | @include transform(perspective(400px) rotateY(90deg)); 9 | } 10 | } 11 | 12 | @mixin flipOutY($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 13 | @include animation-name(flipOutY); 14 | @include count($count); 15 | @include duration($duration); 16 | @include delay($delay); 17 | @include function($function); 18 | @include fill-mode($fill); 19 | @include visibility($visibility); 20 | } 21 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_flippers/flippers.scss: -------------------------------------------------------------------------------- 1 | // INDEX OF FLIPPERS 2 | 3 | @import 4 | "_flip", 5 | "_flipInX", 6 | "_flipInY", 7 | "_flipOutX", 8 | "_flipOutY"; -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_lightspeed/_lightSpeedIn.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(lightSpeedIn) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(translateX(100%) skewX(-30deg)); 5 | } 6 | 60% { 7 | opacity: 1; 8 | @include transform(translateX(-20%) skewX(30deg)); 9 | } 10 | 80% { 11 | opacity: 1; 12 | @include transform(translateX(0%) skewX(-15deg)); 13 | } 14 | 100% { 15 | opacity: 1; 16 | @include transform(translateX(0%) skewX(0deg)); 17 | } 18 | } 19 | 20 | @mixin lightSpeedIn($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 21 | @include animation-name(lightSpeedIn); 22 | @include count($count); 23 | @include function(ease-out); 24 | @include duration($duration); 25 | @include delay($delay); 26 | @include function($function); 27 | @include fill-mode($fill); 28 | @include visibility($visibility); 29 | } 30 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_lightspeed/_lightSpeedOut.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(lightSpeedOut) { 2 | 0% { 3 | opacity: 1; 4 | @include transform(translateX(0%) skewX(0deg)); 5 | } 6 | 100% { 7 | opacity: 0; 8 | @include transform(translateX(100%) skewX(-30deg)); 9 | } 10 | } 11 | 12 | @mixin lightSpeedOut($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 13 | @include animation-name(lightSpeedOut); 14 | @include count($count); 15 | @include function(ease-in); 16 | @include duration($duration); 17 | @include delay($delay); 18 | @include function($function); 19 | @include fill-mode($fill); 20 | @include visibility($visibility); 21 | } 22 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_lightspeed/lightspeed.scss: -------------------------------------------------------------------------------- 1 | // INDEX OF LIGHTSPEED ANIMATIONS 2 | 3 | @import 4 | "_lightSpeedIn", 5 | "_lightSpeedOut"; -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_rotating-entrances/_rotateIn.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(rotateIn) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(rotate(-200deg)); 5 | @include transform-origin(center center); 6 | } 7 | 100% { 8 | opacity: 1; 9 | @include transform(rotate(0)); 10 | @include transform-origin(center center); 11 | } 12 | } 13 | 14 | @mixin rotateIn($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 15 | @include animation-name(rotateIn); 16 | @include count($count); 17 | @include duration($duration); 18 | @include delay($delay); 19 | @include function($function); 20 | @include fill-mode($fill); 21 | @include visibility($visibility); 22 | } 23 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_rotating-entrances/_rotateInDownLeft.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(rotateInDownLeft) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(rotate(-90deg)); 5 | @include transform-origin(left bottom); 6 | } 7 | 100% { 8 | opacity: 1; 9 | @include transform(rotate(0)); 10 | @include transform-origin(left bottom); 11 | } 12 | } 13 | 14 | @mixin rotateInDownLeft($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 15 | @include animation-name(rotateInDownLeft); 16 | @include count($count); 17 | @include duration($duration); 18 | @include delay($delay); 19 | @include function($function); 20 | @include fill-mode($fill); 21 | @include visibility($visibility); 22 | } 23 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_rotating-entrances/_rotateInDownRight.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(rotateInDownRight) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(rotate(90deg)); 5 | @include transform-origin(right bottom); 6 | } 7 | 100% { 8 | opacity: 1; 9 | @include transform(rotate(0)); 10 | @include transform-origin(right bottom); 11 | } 12 | } 13 | 14 | @mixin rotateInDownRight($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 15 | @include animation-name(rotateInDownRight); 16 | @include count($count); 17 | @include duration($duration); 18 | @include delay($delay); 19 | @include function($function); 20 | @include fill-mode($fill); 21 | @include visibility($visibility); 22 | } 23 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_rotating-entrances/_rotateInUpLeft.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(rotateInUpLeft) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(rotate(90deg)); 5 | @include transform-origin(left bottom); 6 | } 7 | 100% { 8 | opacity: 1; 9 | @include transform(rotate(0)); 10 | @include transform-origin(left bottom); 11 | } 12 | } 13 | 14 | @mixin rotateInUpLeft($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 15 | @include animation-name(rotateInUpLeft); 16 | @include count($count); 17 | @include duration($duration); 18 | @include delay($delay); 19 | @include function($function); 20 | @include fill-mode($fill); 21 | @include visibility($visibility); 22 | } 23 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_rotating-entrances/_rotateInUpRight.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(rotateInUpRight) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(rotate(-90deg)); 5 | @include transform-origin(right bottom); 6 | } 7 | 100% { 8 | opacity: 1; 9 | @include transform(rotate(0)); 10 | @include transform-origin(right bottom); 11 | } 12 | } 13 | 14 | @mixin rotateInUpRight($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 15 | @include animation-name(rotateInUpRight); 16 | @include count($count); 17 | @include duration($duration); 18 | @include delay($delay); 19 | @include function($function); 20 | @include fill-mode($fill); 21 | @include visibility($visibility); 22 | } 23 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_rotating-entrances/rotating-entrances.scss: -------------------------------------------------------------------------------- 1 | // INDEX OF ROTATING ENTRANCES 2 | 3 | @import 4 | "_rotateIn", 5 | "_rotateInDownLeft", 6 | "_rotateInDownRight", 7 | "_rotateInUpLeft", 8 | "_rotateInUpRight"; -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_rotating-exits/_rotateOut.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(rotateOut) { 2 | 0% { 3 | opacity: 1; 4 | @include transform(rotate(0)); 5 | @include transform-origin(center center); 6 | } 7 | 100% { 8 | opacity: 0; 9 | @include transform(rotate(200deg)); 10 | @include transform-origin(center center); 11 | } 12 | } 13 | 14 | @mixin rotateOut($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 15 | @include animation-name(rotateOut); 16 | @include count($count); 17 | @include duration($duration); 18 | @include delay($delay); 19 | @include function($function); 20 | @include fill-mode($fill); 21 | @include visibility($visibility); 22 | } 23 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_rotating-exits/_rotateOutDownLeft.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(rotateOutDownLeft) { 2 | 0% { 3 | opacity: 1; 4 | @include transform(rotate(0)); 5 | @include transform-origin(left bottom); 6 | } 7 | 100% { 8 | opacity: 0; 9 | @include transform(rotate(90deg)); 10 | @include transform-origin(left bottom); 11 | } 12 | } 13 | 14 | @mixin rotateOutDownLeft($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 15 | @include animation-name(rotateOutDownLeft); 16 | @include count($count); 17 | @include duration($duration); 18 | @include delay($delay); 19 | @include function($function); 20 | @include fill-mode($fill); 21 | @include visibility($visibility); 22 | } 23 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_rotating-exits/_rotateOutDownRight.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(rotateOutDownRight) { 2 | 0% { 3 | opacity: 1; 4 | @include transform(rotate(0)); 5 | @include transform-origin(right bottom); 6 | } 7 | 100% { 8 | opacity: 0; 9 | @include transform(rotate(-90deg)); 10 | @include transform-origin(right bottom); 11 | } 12 | } 13 | 14 | @mixin rotateOutDownRight($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 15 | @include animation-name(rotateOutDownRight); 16 | @include count($count); 17 | @include duration($duration); 18 | @include delay($delay); 19 | @include function($function); 20 | @include fill-mode($fill); 21 | @include visibility($visibility); 22 | } 23 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_rotating-exits/_rotateOutUpLeft.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(rotateOutUpLeft) { 2 | 0% { 3 | opacity: 1; 4 | @include transform(rotate(0)); 5 | @include transform-origin(left bottom); 6 | } 7 | 100% { 8 | opacity: 0; 9 | @include transform(rotate(-90deg)); 10 | @include transform-origin(left bottom); 11 | } 12 | } 13 | 14 | @mixin rotateOutUpLeft($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 15 | @include animation-name(rotateOutUpLeft); 16 | @include count($count); 17 | @include duration($duration); 18 | @include delay($delay); 19 | @include function($function); 20 | @include fill-mode($fill); 21 | @include visibility($visibility); 22 | } 23 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_rotating-exits/_rotateOutUpRight.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(rotateOutUpRight) { 2 | 0% { 3 | opacity: 1; 4 | @include transform(rotate(0)); 5 | @include transform-origin(right bottom); 6 | } 7 | 100% { 8 | opacity: 0; 9 | @include transform(rotate(90deg)); 10 | @include transform-origin(right bottom); 11 | } 12 | } 13 | 14 | @mixin rotateOutUpRight($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 15 | @include animation-name(rotateOutUpRight); 16 | @include count($count); 17 | @include duration($duration); 18 | @include delay($delay); 19 | @include function($function); 20 | @include fill-mode($fill); 21 | @include visibility($visibility); 22 | } 23 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_rotating-exits/rotating-exits.scss: -------------------------------------------------------------------------------- 1 | // INDEX OF ROTATING EXITS 2 | 3 | @import 4 | "_rotateOut", 5 | "_rotateOutDownLeft", 6 | "_rotateOutDownRight", 7 | "_rotateOutUpLeft", 8 | "_rotateOutUpRight"; -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_sliding-entrances/_slideInDown.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(slideInDown) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(translateY(-2000px)); 5 | } 6 | 100% { 7 | opacity: 1; 8 | @include transform(translateY(0)); 9 | } 10 | } 11 | 12 | @mixin slideInDown($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 13 | @include animation-name(slideInDown); 14 | @include count($count); 15 | @include duration($duration); 16 | @include delay($delay); 17 | @include function($function); 18 | @include fill-mode($fill); 19 | @include visibility($visibility); 20 | } 21 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_sliding-entrances/_slideInLeft.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(slideInLeft) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(translateX(-2000px)); 5 | } 6 | 100% { 7 | opacity: 1; 8 | @include transform(translateX(0)); 9 | } 10 | } 11 | 12 | @mixin slideInLeft($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 13 | @include animation-name(slideInLeft); 14 | @include count($count); 15 | @include duration($duration); 16 | @include delay($delay); 17 | @include function($function); 18 | @include fill-mode($fill); 19 | @include visibility($visibility); 20 | } 21 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_sliding-entrances/_slideInRight.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(slideInRight) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(translateX(2000px)); 5 | } 6 | 100% { 7 | opacity: 1; 8 | @include transform(translateX(0)); 9 | } 10 | } 11 | 12 | @mixin slideInRight($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 13 | @include animation-name(slideInRight); 14 | @include count($count); 15 | @include duration($duration); 16 | @include delay($delay); 17 | @include function($function); 18 | @include fill-mode($fill); 19 | @include visibility($visibility); 20 | } 21 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_sliding-entrances/_slideInUp.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(slideInUp) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(translateY(2000px)); 5 | } 6 | 100% { 7 | opacity: 1; 8 | @include transform(translateY(0)); 9 | } 10 | } 11 | 12 | @mixin slideInUp($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 13 | @include animation-name(slideInUp); 14 | @include count($count); 15 | @include duration($duration); 16 | @include delay($delay); 17 | @include function($function); 18 | @include fill-mode($fill); 19 | @include visibility($visibility); 20 | } 21 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_sliding-entrances/sliding-entrances.scss: -------------------------------------------------------------------------------- 1 | // INDEX OF SLIDING ENTRANCES 2 | 3 | @import 4 | "_slideInDown", 5 | "_slideInLeft", 6 | "_slideInRight", 7 | "_slideInUp"; -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_sliding-exits/_slideOutDown.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(slideOutDown) { 2 | 0% { 3 | @include transform(translateY(0)); 4 | } 5 | 100% { 6 | opacity: 0; 7 | @include transform(translateY(2000px)); 8 | } 9 | } 10 | 11 | @mixin slideOutDown($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 12 | @include animation-name(slideOutDown); 13 | @include count($count); 14 | @include duration($duration); 15 | @include delay($delay); 16 | @include function($function); 17 | @include fill-mode($fill); 18 | @include visibility($visibility); 19 | } 20 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_sliding-exits/_slideOutLeft.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(slideOutLeft) { 2 | 0% { 3 | @include transform(translateX(0)); 4 | } 5 | 100% { 6 | opacity: 0; 7 | @include transform(translateX(-2000px)); 8 | } 9 | } 10 | 11 | @mixin slideOutLeft($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 12 | @include animation-name(slideOutLeft); 13 | @include count($count); 14 | @include duration($duration); 15 | @include delay($delay); 16 | @include function($function); 17 | @include fill-mode($fill); 18 | @include visibility($visibility); 19 | } 20 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_sliding-exits/_slideOutRight.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(slideOutRight) { 2 | 0% { 3 | @include transform(translateX(0)); 4 | } 5 | 100% { 6 | opacity: 0; 7 | @include transform(translateX(2000px)); 8 | } 9 | } 10 | 11 | @mixin slideOutRight($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 12 | @include animation-name(slideOutRight); 13 | @include count($count); 14 | @include duration($duration); 15 | @include delay($delay); 16 | @include function($function); 17 | @include fill-mode($fill); 18 | @include visibility($visibility); 19 | } 20 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_sliding-exits/_slideOutUp.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(slideOutUp) { 2 | 0% { 3 | @include transform(translateY(0)); 4 | } 5 | 100% { 6 | opacity: 0; 7 | @include transform(translateY(-2000px)); 8 | } 9 | } 10 | 11 | @mixin slideOutUp($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 12 | @include animation-name(slideOutUp); 13 | @include count($count); 14 | @include duration($duration); 15 | @include delay($delay); 16 | @include function($function); 17 | @include fill-mode($fill); 18 | @include visibility($visibility); 19 | } 20 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_sliding-exits/sliding-exits.scss: -------------------------------------------------------------------------------- 1 | // INDEX OF SLIDING EXITS 2 | 3 | @import 4 | "_slideOutDown", 5 | "_slideOutLeft", 6 | "_slideOutRight", 7 | "_slideOutUp"; -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_specials/_rollIn.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(rollIn) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(translateX(-100%) rotate(-120deg)); 5 | } 6 | 100% { 7 | opacity: 1; 8 | @include transform(translateX(0px) rotate(0deg)); 9 | } 10 | } 11 | 12 | @mixin rollIn($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 13 | @include animation-name(rollIn); 14 | @include count($count); 15 | @include duration($duration); 16 | @include delay($delay); 17 | @include function($function); 18 | @include fill-mode($fill); 19 | @include visibility($visibility); 20 | } 21 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_specials/_rollOut.scss: -------------------------------------------------------------------------------- 1 | // originally authored by Nick Pettit - https://github.com/nickpettit/glide 2 | 3 | @include keyframes(rollOut) { 4 | 0% { 5 | opacity: 1; 6 | @include transform(translateX(0px) rotate(0deg)); 7 | } 8 | 100% { 9 | opacity: 0; 10 | @include transform(translateX(100%) rotate(120deg)); 11 | } 12 | } 13 | 14 | @mixin rollOut($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 15 | @include animation-name(rollOut); 16 | @include count($count); 17 | @include duration($duration); 18 | @include delay($delay); 19 | @include function($function); 20 | @include fill-mode($fill); 21 | @include visibility($visibility); 22 | } 23 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_specials/specials.scss: -------------------------------------------------------------------------------- 1 | // INDEX OF SPECIAL ANIMATIONS 2 | 3 | @import 4 | "_hinge", 5 | "_rollIn", 6 | "_rollOut"; -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_zooming-entrances/_zoomIn.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(zoomIn) { 2 | 0% { 3 | opacity: 0; 4 | @include transform(scale3d(.3, .3, .3)); 5 | } 6 | 50% { 7 | opacity: 1; 8 | } 9 | } 10 | 11 | @mixin zoomIn($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 12 | @include animation-name(zoomIn); 13 | @include count($count); 14 | @include duration($duration); 15 | @include delay($delay); 16 | @include function($function); 17 | @include fill-mode($fill); 18 | @include visibility($visibility); 19 | } 20 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_zooming-entrances/_zoomInDown.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(zoomInDown) { 2 | 0% { 3 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 4 | opacity: 0; 5 | @include transform(scale3d(.1, .1, .1) translate3d(0, -1000px, 0)); 6 | } 7 | 60% { 8 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 9 | opacity: 1; 10 | @include transform(scale3d(.475, .475, .475) translate3d(0, 60px, 0)); 11 | } 12 | } 13 | 14 | @mixin zoomInDown($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 15 | @include animation-name(zoomInDown); 16 | @include count($count); 17 | @include duration($duration); 18 | @include delay($delay); 19 | @include function($function); 20 | @include fill-mode($fill); 21 | @include visibility($visibility); 22 | } 23 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_zooming-entrances/_zoomInLeft.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(zoomInLeft) { 2 | 0% { 3 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 4 | opacity: 0; 5 | @include transform(scale3d(.1, .1, .1) translate3d(-1000px, 0, 0)); 6 | } 7 | 60% { 8 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 9 | opacity: 1; 10 | @include transform(scale3d(.475, .475, .475) translate3d(10px, 0, 0)); 11 | } 12 | } 13 | 14 | @mixin zoomInLeft($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 15 | @include animation-name(zoomInLeft); 16 | @include count($count); 17 | @include duration($duration); 18 | @include delay($delay); 19 | @include function($function); 20 | @include fill-mode($fill); 21 | @include visibility($visibility); 22 | } 23 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_zooming-entrances/_zoomInRight.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(zoomInRight) { 2 | 0% { 3 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 4 | opacity: 0; 5 | @include transform(scale3d(.1, .1, .1) translate3d(1000px, 0, 0)); 6 | } 7 | 60% { 8 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 9 | opacity: 1; 10 | @include transform(scale3d(.475, .475, .475) translate3d(-10px, 0, 0)); 11 | } 12 | } 13 | 14 | @mixin zoomInRight($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 15 | @include animation-name(zoomInRight); 16 | @include count($count); 17 | @include duration($duration); 18 | @include delay($delay); 19 | @include function($function); 20 | @include fill-mode($fill); 21 | @include visibility($visibility); 22 | } 23 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_zooming-entrances/_zoomInUp.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(zoomInUp) { 2 | 0% { 3 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 4 | opacity: 0; 5 | @include transform(scale3d(.1, .1, .1) translate3d(0, 1000px, 0)); 6 | } 7 | 60% { 8 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 9 | opacity: 1; 10 | @include transform(scale3d(.475, .475, .475) translate3d(0, -60px, 0)); 11 | } 12 | } 13 | 14 | @mixin zoomInUp($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 15 | @include animation-name(zoomInUp); 16 | @include count($count); 17 | @include duration($duration); 18 | @include delay($delay); 19 | @include function($function); 20 | @include fill-mode($fill); 21 | @include visibility($visibility); 22 | } 23 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_zooming-entrances/zooming-entrances.scss: -------------------------------------------------------------------------------- 1 | // INDEX OF ZOOMING ENTRANCES 2 | 3 | @import 4 | "_zoomIn", 5 | "_zoomInDown", 6 | "_zoomInLeft", 7 | "_zoomInRight", 8 | "_zoomInUp"; 9 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_zooming-exits/_zoomOut.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(zoomOut) { 2 | 0% { 3 | opacity: 1; 4 | } 5 | 50% { 6 | opacity: 0; 7 | @include transform(scale3d(.3, .3, .3)); 8 | } 9 | 100% { 10 | opacity: 0; 11 | } 12 | } 13 | 14 | @mixin zoomOut($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 15 | @include animation-name(zoomOut); 16 | @include count($count); 17 | @include duration($duration); 18 | @include delay($delay); 19 | @include function($function); 20 | @include fill-mode($fill); 21 | @include visibility($visibility); 22 | } 23 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_zooming-exits/_zoomOutDown.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(zoomOutDown) { 2 | 40% { 3 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 4 | opacity: 1; 5 | @include transform(scale3d(.475, .475, .475) translate3d(0, -60px, 0)); 6 | } 7 | 100% { 8 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 9 | opacity: 0; 10 | @include transform(scale3d(.1, .1, .1) translate3d(0, 2000px, 0)); 11 | @include transform-origin(center bottom); 12 | } 13 | } 14 | 15 | @mixin zoomOutDown($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 16 | @include animation-name(zoomOutDown); 17 | @include count($count); 18 | @include duration($duration); 19 | @include delay($delay); 20 | @include function($function); 21 | @include fill-mode($fill); 22 | @include visibility($visibility); 23 | } 24 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_zooming-exits/_zoomOutLeft.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(zoomOutLeft) { 2 | 40% { 3 | opacity: 1; 4 | @include transform(scale3d(.475, .475, .475) translate3d(42px, 0, 0)); 5 | } 6 | 100% { 7 | opacity: 0; 8 | @include transform(scale(.1) translate3d(-2000px, 0, 0)); 9 | @include transform-origin(left center); 10 | } 11 | } 12 | 13 | @mixin zoomOutLeft($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 14 | @include animation-name(zoomOutLeft); 15 | @include count($count); 16 | @include duration($duration); 17 | @include delay($delay); 18 | @include function($function); 19 | @include fill-mode($fill); 20 | @include visibility($visibility); 21 | } 22 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_zooming-exits/_zoomOutRight.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(zoomOutRight) { 2 | 40% { 3 | opacity: 1; 4 | @include transform(scale3d(.475, .475, .475) translate3d(-42px, 0, 0)); 5 | } 6 | 100% { 7 | opacity: 0; 8 | @include transform(scale(.1) translate3d(2000px, 0, 0)); 9 | @include transform-origin(right center); 10 | } 11 | } 12 | 13 | @mixin zoomOutRight($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 14 | @include animation-name(zoomOutRight); 15 | @include count($count); 16 | @include duration($duration); 17 | @include delay($delay); 18 | @include function($function); 19 | @include fill-mode($fill); 20 | @include visibility($visibility); 21 | } 22 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_zooming-exits/_zoomOutUp.scss: -------------------------------------------------------------------------------- 1 | @include keyframes(zoomOutUp) { 2 | 40% { 3 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 4 | opacity: 1; 5 | @include transform(scale3d(.475, .475, .475) translate3d(0, 60px, 0)); 6 | } 7 | 100% { 8 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 9 | opacity: 0; 10 | @include transform(scale3d(.1, .1, .1) translate3d(0, -2000px, 0)); 11 | @include transform-origin(center bottom); 12 | } 13 | } 14 | 15 | @mixin zoomOutUp($count: $countDefault, $duration: $durationDefault, $delay: $delayDefault, $function: $functionDefault, $fill: $fillDefault, $visibility: $visibilityDefault) { 16 | @include animation-name(zoomOutUp); 17 | @include count($count); 18 | @include duration($duration); 19 | @include delay($delay); 20 | @include function($function); 21 | @include fill-mode($fill); 22 | @include visibility($visibility); 23 | } 24 | -------------------------------------------------------------------------------- /docs/_sass/vendors/animate/_zooming-exits/zooming-exits.scss: -------------------------------------------------------------------------------- 1 | // INDEX OF ZOOMING EXITS 2 | 3 | @import 4 | "_zoomOut", 5 | "_zoomOutDown", 6 | "_zoomOutLeft", 7 | "_zoomOutRight", 8 | "_zoomOutUp"; 9 | -------------------------------------------------------------------------------- /docs/css/docs.scss: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | // Utils 5 | @import "utils/variables"; 6 | @import "utils/mixins"; 7 | 8 | // Base 9 | @import "base/reset"; 10 | @import "base/base"; 11 | 12 | // Components 13 | @import "components/buttons"; 14 | 15 | @import "components/doc-header"; 16 | @import "components/doc-content"; 17 | @import "components/doc-body"; 18 | @import "components/doc-versions"; 19 | @import "components/wrapper"; 20 | @import "components/sidebar"; 21 | @import "components/sidebar-nav"; 22 | @import "components/wrapper"; 23 | @import "components/code"; 24 | @import "components/badges"; 25 | @import "components/table"; 26 | -------------------------------------------------------------------------------- /docs/css/styles.scss: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | // Vendors 5 | @import "vendors/animate/animate"; 6 | 7 | // Utils 8 | @import "utils/variables"; 9 | @import "utils/mixins"; 10 | 11 | // Base 12 | @import "base/reset"; 13 | @import "base/base"; 14 | 15 | // Components 16 | @import "components/masthead"; 17 | @import "components/buttons"; 18 | @import "components/features"; 19 | @import "components/navigation"; 20 | @import "components/footer"; 21 | @import "components/doc-versions"; 22 | -------------------------------------------------------------------------------- /docs/extra/apple-jazzy-theme/assets/img/carat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/docs/extra/apple-jazzy-theme/assets/img/carat.png -------------------------------------------------------------------------------- /docs/extra/apple-jazzy-theme/assets/img/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/docs/extra/apple-jazzy-theme/assets/img/dash.png -------------------------------------------------------------------------------- /docs/extra/apple-jazzy-theme/assets/img/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/docs/extra/apple-jazzy-theme/assets/img/gh.png -------------------------------------------------------------------------------- /docs/extra/apple-jazzy-theme/templates/footer.mustache: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /docs/extra/apple-jazzy-theme/templates/header.mustache: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{module_name}} Docs{{#doc_coverage}} ({{doc_coverage}}% documented){{/doc_coverage}}

4 | {{#github_url}} 5 |

View on GitHub

6 | {{/github_url}} 7 | {{#dash_url}} 8 |

Install in Dash

9 | {{/dash_url}} 10 |
11 |
12 | -------------------------------------------------------------------------------- /docs/extra/apple-jazzy-theme/templates/nav.mustache: -------------------------------------------------------------------------------- 1 | 17 | -------------------------------------------------------------------------------- /docs/extra/apple-jazzy-theme/templates/parameter.mustache: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{name}} 5 | 6 | 7 | 8 |
9 | {{{discussion}}} 10 |
11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/extra/apple-jazzy-theme/templates/tasks.mustache: -------------------------------------------------------------------------------- 1 | {{#tasks.count}} 2 |
3 | {{#tasks}} 4 | {{> task}} 5 | {{/tasks}} 6 |
7 | {{/tasks.count}} 8 | -------------------------------------------------------------------------------- /docs/extra/bow-jazzy-theme/assets/fonts/opensans-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/docs/extra/bow-jazzy-theme/assets/fonts/opensans-bold.eot -------------------------------------------------------------------------------- /docs/extra/bow-jazzy-theme/assets/fonts/opensans-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/docs/extra/bow-jazzy-theme/assets/fonts/opensans-bold.woff -------------------------------------------------------------------------------- /docs/extra/bow-jazzy-theme/assets/fonts/opensans-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/docs/extra/bow-jazzy-theme/assets/fonts/opensans-regular.eot -------------------------------------------------------------------------------- /docs/extra/bow-jazzy-theme/assets/fonts/opensans-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/docs/extra/bow-jazzy-theme/assets/fonts/opensans-regular.woff -------------------------------------------------------------------------------- /docs/extra/bow-jazzy-theme/assets/img/bow-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/docs/extra/bow-jazzy-theme/assets/img/bow-logo.png -------------------------------------------------------------------------------- /docs/extra/bow-jazzy-theme/assets/img/carat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/docs/extra/bow-jazzy-theme/assets/img/carat.png -------------------------------------------------------------------------------- /docs/extra/bow-jazzy-theme/assets/img/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/docs/extra/bow-jazzy-theme/assets/img/dash.png -------------------------------------------------------------------------------- /docs/extra/bow-jazzy-theme/assets/img/github.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/extra/bow-jazzy-theme/templates/deprecation.mustache: -------------------------------------------------------------------------------- 1 | {{#deprecation_message}} 2 |
3 |

Deprecated

4 | {{{deprecation_message}}} 5 |
6 | {{/deprecation_message}} 7 | {{#unavailable_message}} 8 |
9 |

Unavailable

10 | {{{unavailable_message}}} 11 |
12 | {{/unavailable_message}} -------------------------------------------------------------------------------- /docs/extra/bow-jazzy-theme/templates/footer.mustache: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /docs/extra/bow-jazzy-theme/templates/nav.mustache: -------------------------------------------------------------------------------- 1 | 24 | -------------------------------------------------------------------------------- /docs/extra/bow-jazzy-theme/templates/parameter.mustache: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{name}} 5 | 6 | 7 | 8 |
9 | {{{discussion}}} 10 |
11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/extra/bow-jazzy-theme/templates/tasks.mustache: -------------------------------------------------------------------------------- 1 | {{#tasks.count}} 2 |
3 |
4 | {{#tasks}} 5 | {{> task}} 6 | {{/tasks}} 7 |
8 |
9 | {{/tasks.count}} 10 | -------------------------------------------------------------------------------- /docs/extra/mapbox-jazzy-theme/assets/fonts/opensans-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/docs/extra/mapbox-jazzy-theme/assets/fonts/opensans-bold.eot -------------------------------------------------------------------------------- /docs/extra/mapbox-jazzy-theme/assets/fonts/opensans-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/docs/extra/mapbox-jazzy-theme/assets/fonts/opensans-bold.woff -------------------------------------------------------------------------------- /docs/extra/mapbox-jazzy-theme/assets/fonts/opensans-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/docs/extra/mapbox-jazzy-theme/assets/fonts/opensans-regular.eot -------------------------------------------------------------------------------- /docs/extra/mapbox-jazzy-theme/assets/fonts/opensans-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/docs/extra/mapbox-jazzy-theme/assets/fonts/opensans-regular.woff -------------------------------------------------------------------------------- /docs/extra/mapbox-jazzy-theme/assets/img/carat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/docs/extra/mapbox-jazzy-theme/assets/img/carat.png -------------------------------------------------------------------------------- /docs/extra/mapbox-jazzy-theme/assets/img/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/docs/extra/mapbox-jazzy-theme/assets/img/dash.png -------------------------------------------------------------------------------- /docs/extra/mapbox-jazzy-theme/assets/img/github.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/extra/mapbox-jazzy-theme/templates/deprecation.mustache: -------------------------------------------------------------------------------- 1 | {{#deprecation_message}} 2 |
3 |

Deprecated

4 | {{{deprecation_message}}} 5 |
6 | {{/deprecation_message}} 7 | {{#unavailable_message}} 8 |
9 |

Unavailable

10 | {{{unavailable_message}}} 11 |
12 | {{/unavailable_message}} -------------------------------------------------------------------------------- /docs/extra/mapbox-jazzy-theme/templates/footer.mustache: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /docs/extra/mapbox-jazzy-theme/templates/nav.mustache: -------------------------------------------------------------------------------- 1 | 24 | -------------------------------------------------------------------------------- /docs/extra/mapbox-jazzy-theme/templates/parameter.mustache: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{name}} 5 | 6 | 7 | 8 |
9 | {{{discussion}}} 10 |
11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/extra/mapbox-jazzy-theme/templates/tasks.mustache: -------------------------------------------------------------------------------- 1 | {{#tasks.count}} 2 |
3 |
4 | {{#tasks}} 5 | {{> task}} 6 | {{/tasks}} 7 |
8 |
9 | {{/tasks.count}} 10 | -------------------------------------------------------------------------------- /docs/img/bow-brand-color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/docs/img/bow-brand-color.png -------------------------------------------------------------------------------- /docs/img/bow-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/docs/img/bow-logo.png -------------------------------------------------------------------------------- /docs/img/bow-logo_no-text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/docs/img/bow-logo_no-text.png -------------------------------------------------------------------------------- /docs/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/docs/img/favicon.png -------------------------------------------------------------------------------- /docs/img/twitter-card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/docs/img/twitter-card.png -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: home 3 | --- 4 | -------------------------------------------------------------------------------- /docs/js/functions.js: -------------------------------------------------------------------------------- 1 | // Navbar 2 | 3 | $(window).on("load", function () { 4 | $(window).scroll(function () { 5 | if ($("#navigation").offset().top > 0) { 6 | $("#navigation").addClass("navigation-scroll"); 7 | } else { 8 | $("#navigation").removeClass("navigation-scroll"); 9 | } 10 | }); 11 | 12 | // Function to load GitHub stats, which expects a DOM element with 'stars' as id 13 | (function loadGitHubStats() { 14 | var gitHubAPI = "https://api.github.com/repos/bow-swift/bow?callback=?"; 15 | $.getJSON(gitHubAPI).done(function(data) { 16 | $('#stars').text(data.data.stargazers_count); 17 | }); 18 | })(); 19 | }); 20 | -------------------------------------------------------------------------------- /fastlane/Appfile: -------------------------------------------------------------------------------- 1 | # app_identifier("[[APP_IDENTIFIER]]") # The bundle identifier of your app 2 | # apple_id("[[APPLE_ID]]") # Your Apple email address 3 | 4 | 5 | # For more information about the Appfile, see: 6 | # https://docs.fastlane.tools/advanced/#appfile 7 | -------------------------------------------------------------------------------- /fastlane/README.md: -------------------------------------------------------------------------------- 1 | fastlane documentation 2 | ================ 3 | # Installation 4 | 5 | Make sure you have the latest version of the Xcode command line tools installed: 6 | 7 | ``` 8 | xcode-select --install 9 | ``` 10 | 11 | Install _fastlane_ using 12 | ``` 13 | [sudo] gem install fastlane -NV 14 | ``` 15 | or alternatively using `brew cask install fastlane` 16 | 17 | # Available Actions 18 | ## iOS 19 | ### ios release 20 | ``` 21 | fastlane ios release 22 | ``` 23 | Prepare for release 24 | 25 | ---- 26 | 27 | This README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run. 28 | More information about fastlane can be found on [fastlane.tools](https://fastlane.tools). 29 | The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools). 30 | -------------------------------------------------------------------------------- /favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bow-swift/bow/a8c1a719cd8407dfae6ffeb6de1110177c4a7819/favicon.png --------------------------------------------------------------------------------