меня такая ситуация:Выписка из
import Control.Monad.Except
data Foo = Foo { i :: Int }
data Bar = Bar { i :: Int , v: Char }
emptyFoo = Foo 0
emptyBar = Bar 0 'N'
extractF :: (Except String Foo) -> Foo
extractF ex = either (const emptyFoo) id (runExcept ex)
extractB :: (Except String Bar) -> Bar
extractB ex = either (const emptyBar) id (runExcept ex)
Есть ли способ обобщить extract
функции выше в одном только как:
myfoo = extract someFooInstanceWrappedInException
mybar = extract someBarInstanceWrappedInException
?
Что будет использоваться для «пустого» корпуса? Вы должны передать его каким-то образом, либо явным параметром, либо словарем типа. – chi
пустые случаи только там, чтобы «заполнить» либо. – Randomize