Мне интересно, есть ли идиома для обработки следующего примера. Это должно быть довольно распространенным явлением, и я не думаю, что вы можете использовать там, где это нужно. Помимо написания двух отдельных случаев, я не знаю, как это сделать.Haskell, Case in a Where
Общая проблема заключается в том, что я хочу, чтобы создать карту с другим значением в зависимости от SelectionType
, например, так:
type OtherType = { x :: Int, y :: Int, z :: String } deriving (Show)
data SelectionType = A | B
myMapper = map foo someMyTypes
где someMyTypes :: [MyType]
и foo
является
foo :: SelectionType -> MyType -> OtherType
foo sel t = [ x t, y t, z t <> something ]
where
case SelectionType of
A -> something = "a selected"
B -> something = "b selected"
Что является лучшим способ справиться с этим вышеприведенным случаем, поскольку вышеупомянутое не компилируется.
Кроме того, вы соглашаетесь на переменную 'sel', а не на имя типа, поскольку @ user7428320 был (неправильно). –
@ AntalSpector-Zabusky Конечно. Я предположил, что и его несколько других ошибок (например, не давая 'foo' аргумент в выражении' map', объявляя 'OtherType' как' type' с синтаксисом записи, давая возвращаемый тип 'OtherType', но значение с список в ...) были введены при написании вопроса. –
К сожалению, не заметил всех из них :-) Просто хотел называть это явно для потенциального преимущества @ user7428320, так как он казался потенциально более связанным с их путаницей! –