Как мне преобразовать переменную в строку? - PullRequest
0 голосов
/ 30 ноября 2008

Например, чтобы это работало так toString (Var x) = "x"

Ответы [ 2 ]

1 голос
/ 30 ноября 2008

Используйте функцию show:

putStrLn (show x)

выведет переменную "x". (Естественно, вам не нужно использовать его с putStrLn, либо - show возвращает строку, которую можно использовать в любом месте, например строку.)

0 голосов
/ 10 ноября 2009

Если я вас правильно понимаю, вы спрашиваете, как преобразовать программные конструкции в строки. Вы не беспокоитесь о том, что символ «x» представляет так сильно, как о том, что программист назвал его «x» в исходном файле.

Вы можете преобразовать конструкторы данных в строки, используя некоторые компоненты Scrap Your Boilerplate. Вот пример, который делает то, что вы просили.

{-# LANGUAGE DeriveDataTypeable #-}

module Main where

import Data.Data

data Var a = Var a
data X = X deriving (Data, Typeable)

toString :: Data a => Var a -> String
toString (Var c) = show (toConstr c)

main :: IO ()
main = putStrLn $ "toString (Var x)= " ++ show (toString (Var X))

выход:

$ ghci Test.hs
GHCi, version 6.10.4: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer ... linking ... done.
Loading package base ... linking ... done.
[1 of 1] Compiling Main             ( Test.hs, interpreted )
Ok, modules loaded: Main.
*Main> main
toString (Var X)= "X"
*Main>

В качестве реального примера я предлагаю взглянуть на библиотеку RJson .

...