{-# OPTIONS_GHC -fno-warn-orphans #-}
module Futhark.IR.SyntaxTests (parseString) where
import Data.String
import Data.Text qualified as T
import Futhark.IR.Parse
import Futhark.IR.Syntax
parseString :: String -> (FilePath -> T.Text -> Either T.Text a) -> String -> a
parseString :: forall a.
String -> (String -> Text -> Either Text a) -> String -> a
parseString String
desc String -> Text -> Either Text a
p =
(Text -> a) -> (a -> a) -> Either Text a -> a
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either (String -> a
forall a. HasCallStack => String -> a
error (String -> a) -> (Text -> String) -> Text -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> String
T.unpack) a -> a
forall a. a -> a
id (Either Text a -> a) -> (String -> Either Text a) -> String -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text -> Either Text a
p (String
"IsString " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
desc) (Text -> Either Text a)
-> (String -> Text) -> String -> Either Text a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack
instance IsString Type where
fromString :: String -> Type
fromString = String -> (String -> Text -> Either Text Type) -> String -> Type
forall a.
String -> (String -> Text -> Either Text a) -> String -> a
parseString String
"Type" String -> Text -> Either Text Type
parseType
instance IsString DeclExtType where
fromString :: String -> DeclExtType
fromString = String
-> (String -> Text -> Either Text DeclExtType)
-> String
-> DeclExtType
forall a.
String -> (String -> Text -> Either Text a) -> String -> a
parseString String
"DeclExtType" String -> Text -> Either Text DeclExtType
parseDeclExtType
instance IsString DeclType where
fromString :: String -> DeclType
fromString = String
-> (String -> Text -> Either Text DeclType) -> String -> DeclType
forall a.
String -> (String -> Text -> Either Text a) -> String -> a
parseString String
"DeclType" String -> Text -> Either Text DeclType
parseDeclType
instance IsString VName where
fromString :: String -> VName
fromString = String -> (String -> Text -> Either Text VName) -> String -> VName
forall a.
String -> (String -> Text -> Either Text a) -> String -> a
parseString String
"VName" String -> Text -> Either Text VName
parseVName
instance IsString SubExp where
fromString :: String -> SubExp
fromString = String
-> (String -> Text -> Either Text SubExp) -> String -> SubExp
forall a.
String -> (String -> Text -> Either Text a) -> String -> a
parseString String
"SubExp" String -> Text -> Either Text SubExp
parseSubExp
instance IsString SubExpRes where
fromString :: String -> SubExpRes
fromString = String
-> (String -> Text -> Either Text SubExpRes) -> String -> SubExpRes
forall a.
String -> (String -> Text -> Either Text a) -> String -> a
parseString String
"SubExpRes" String -> Text -> Either Text SubExpRes
parseSubExpRes