У меня есть проект, над которым я работаю в Haskell, и у меня есть функции для DSL. Мы создаем собственные типы и используем их для написания различных функций.Haskell - isBread function
data Layer = Bread Bread | Meat Meat |
Cheese Cheese | Vegetable Vegetable |
Condiment Condiment
deriving (Eq,Show)
data Bread = White | Wheat | Rye
deriving (Eq,Show)
То, что я пытаюсь сделать прямо сейчас реализовать функцию isBread, которая принимает слой и возвращает истину или ложь, если это хлеб или нет.
isBread :: Layer -> Bool
isBread b | White = True
| Wheat = True
| Rye = True
| otherwise = False
С выше коде, я получаю ошибку, что она не может соответствовать ожидаемому типу «Bool» с хлебом наберете».
isBread :: Layer -> Bool
isBread b | Bool a = True while b = White
| Bool a = True while b = Wheat
| Bool a = True while b = Rye
| otherwise Bool a = False
Я пробовал приведенный выше код рядом с попыткой возврата фактического булева, но у меня была ошибка синтаксического анализа. Я не знаю, выключен ли мой синтаксис, но похоже, что он должен делать то, что я хочу. Какие-либо предложения?
Чтобы узнать, где лежит ошибка, посмотрите на это объявление 'data Layer = Bread String | Meat String' и попробуйте написать 'isBread' для этого. –