HASKELL - Изменить тип
Мне нужно создать функцию f:: Log->[String]
это делает это (((o, i ,d),s) = [(o, i ,d)]
type Log = (Plate, [String])
type Plate = (Pin, Pin, Pin)
type Pin = (Char, Int)
4 ответа
Если вы находитесь на такой странице, нажмите "Источник" на правой стороне рядом с функцией, которая вас интересует.
Если вам нужно найти функцию, Hayoo! и Google свяжет вас со страницами документации, подобными приведенным выше.
Важно отметить, что show
не имеет одного определения. show
это функция, определенная для всех типов данных в Show
(с большой буквы "S") Например, вот полный исходный код класса типов Show. Show определяется в классе типов как просто show :: a -> String
, Но если вы будете искать "экземпляр Show Bool" или "экземпляр Show Int", вы найдете конкретные определения.
Для второй части вашего вопроса, самый простой способ получить show
Функция для нового типа состоит в том, чтобы просто написать deriving (Show)
под этим. Например,
data Foo = Foo Int Int
deriving (Show)
Теперь я могу использовать show
на данных с типом Foo
,
Используйте Google, чтобы найти такую информацию.
Пример: http://www.haskell.org/hoogle/?hoogle=show
Как только вы нашли нужную функцию в списке, нажмите и там вы найдете Source
ссылка в правой части страницы.
NB это ответ на оригинальный вопрос:
Где я могу увидеть коды предопределенных функций в haskell?? В основном функция ШОУ?
Это правда, что вы можете использовать Hoogle для поиска функций, определенных в Prelude (и других модулях), но сам исходный код находится в Hackage.
Hackage - это база данных пакетов Haskell. Вы можете загрузить новые пакеты из него, а также просмотреть документацию Haddock для каждого пакета в базе данных.
Это страница Haddock для стандартной прелюдии. Он документирует классы типов, типы данных, типы и функции верхнего уровня, экспортируемые модулем Prelude. Справа от каждого определения заголовка находится ссылка с надписью "Источник". Вы можете нажать эту кнопку, чтобы перейти к онлайн-копии исходного кода модуля, который вы просматриваете.
При предварительном просмотре вы теперь задаете совершенно другой вопрос, а при предварительном просмотре фактически исходный вопрос был отредактирован из этого поста.
Ваш новый вопрос неясен, но это решение будет работать для получения результата в вашем примере.
> [fst ((('O',0),('I',0),('D',1)),"O->D")]
[(('O',0),('I',0),('D',1))]
Я думаю, что вы используете нотацию списка вместо двойных кавычек для идентификации String
s, кстати, так что я исправил это вокруг 0->D
выше. Так что вы можете попробовать это вместо этого.
> show (fst ((('O',0),('I',0),('D',1)),"O->D"))
"(('O',0),('I',0),('D',1))"
Это работает, потому что у вас есть только определенные синонимы типа (используя type
в ваших декларациях вместо data
) на структурах данных, которые уже имеют Show
экземпляров.