packages feed

morley-1.16.3: src/Morley/Util/Default.hs

-- SPDX-FileCopyrightText: 2021 Oxhead Alpha
-- SPDX-License-Identifier: LicenseRef-MIT-OA

module Morley.Util.Default
  ( permute2Def , permute3Def
  , Default (..)
  ) where

import Control.Applicative.Permutations (runPermutation, toPermutationWithDefault)
import Data.Default (Default, def)

{- Permutation Parsers -}

permute2Def :: (Default a, Default b, Monad f, Alternative f) => f a -> f b -> f (a,b)
permute2Def a b = runPermutation $
  (,) <$> toPermutationWithDefault def a
      <*> toPermutationWithDefault def b

permute3Def :: (Default a, Default b, Default c, Monad f, Alternative f) =>
                f a -> f b -> f c -> f (a,b,c)
permute3Def a b c = runPermutation $
  (,,) <$> toPermutationWithDefault def a
       <*> toPermutationWithDefault def b
       <*> toPermutationWithDefault def c